[英]ASP.NET ExecutionTimeout no effect on IIS-hosted WCF service
[英]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並單擊附加。
您現在應該能夠調試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.