簡體   English   中英

調試IIS中托管的asp.net WCF服務

[英]debugging asp.net WCF service hosted in IIS

我使用以下模板創建了一個WCF服務:

http://visualstudiogallery.msdn.microsoft.com/fbc7e5c1-a0d2-41bd-9d7b-e54c845394cd

這項服務有這樣的方法:

[ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]    
    public class RecordingCompleted
    {

        [WebInvoke(UriTemplate = "", Method = "POST")]
        public string ProcessCall(string JsonData)
        {

        }

    }

我在IIS上托管了這個服務,該方法的url是:

http:// [local] host / Notifications / RecordingCompleted /

當我在地址欄中輸入此地址時,我得到:

Method not allowed. Please see the service help page for constructing valid requests to the service.

我正在嘗試使用以下代碼使用此Web服務:

string serviceBaseUrl =“http:// [local] host / Notifications / RecordingCompleted /”;

        string resourceUrl = "";
        string method = "POST";
        //string jsonText = "}";
        UseHttpWebApproach(serviceBaseUrl, resourceUrl, method, jsonText);

方法是:

  private string UseHttpWebApproach(string serviceUrl, string resourceUrl, string method, string requestBody)
        {
            string responseMessage = null;
            var request = WebRequest.Create(string.Concat(serviceUrl, resourceUrl)) as HttpWebRequest;
            if (request != null)
            {
                request.ContentType = "application/json";
                request.Method = method;                 
            }

            //var objContent = HttpContentExtensions.CreateDataContract(requestBody);
            if (method == "POST" && requestBody != null)
            {
                byte[] requestBodyBytes = ToByteArrayUsingJsonContractSer(requestBody);
                request.ContentLength = requestBodyBytes.Length;
                using (Stream postStream = request.GetRequestStream())
                    postStream.Write(requestBodyBytes, 0, requestBodyBytes.Length);

            }

            if (request != null)
            {
                var response = request.GetResponse() as HttpWebResponse;
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    Stream responseStream = response.GetResponseStream();
                    if (responseStream != null)
                    {
                        var reader = new StreamReader(responseStream);

                        responseMessage = reader.ReadToEnd();
                    }
                }
                else
                {
                    responseMessage = response.StatusDescription;
                }
            }
            return responseMessage;
        }



 private static byte[] ToByteArrayUsingJsonContractSer(string requestBody)
    {
        byte[] bytes = null;
        var serializer1 = new DataContractJsonSerializer(typeof(string));
        var ms1 = new MemoryStream();
        serializer1.WriteObject(ms1, requestBody);
        ms1.Position = 0;
        var reader = new StreamReader(ms1);
        bytes = ms1.ToArray();
        return bytes;
    }

我正在嘗試調試服務方法,但我不知道該怎么做。 當我在地址欄中鍵入http:// [local] host / Notifications / RecordingCompleted /時,請建議我為什么會收到錯誤。 以及如何調試托管在本地主機上的服務?

此致,Asif Hameed

在調試之前,您必須將dll和pdb部署到IIS目錄。 接下來,在您的VS中單擊調試 - >附加到進程..“確保選中顯示所有用戶的進程”和“在所有會話中顯示進程”,您現在應該在可用進程列表中看到W3WP進程。 選擇W3WP並單擊附加。 VS附加截圖

您現在應該能夠調試WCF服務。 有關更多調試技巧,請參閱以下博客

http://dhawalk.blogspot.com/2007/07/debugging-tips-in-c.html http://anilsharmadhanbad.blogspot.com/2009/07/debugging-wcf-service-hosted-in-local.html

嘗試瀏覽WCF的URL時出現“方法不允許”錯誤的原因有多種:

1)使用IIS未正確配置ASP.NET版本(為適當版本的.NET重新運行aspnet_regiis.exe應用程序)

2).svc文件未映射為使用aspnet_isapi.dll(再次運行aspnet_regiis.exe)

3)在WCF框架之后安裝了IIS:對於這個,您需要運行此應用程序,其中'xx'是課程的版本:“%WINDIR%\\ Microsoft.Net \\ Framework \\ xx \\ Windows Communication Foundation \\ ServiceModelReg.exe“-r

看看這篇文章 ,進一步閱讀IIS / ASP.NET配置問題...

但是,我發現“方法不允許”的常見原因是由於我在web.config中犯了一個錯誤:綁定信息中的拼寫錯誤會引起它。 看看你的web.config並確保URL正確無誤。

如果您已經用盡了所有這些途徑並且仍然“不允許使用方法”,請嘗試使用服務跟蹤查看器工具 ,它可以提供有關出錯的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM