我使用以下模板创建了一个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上托管此服务,该方法的网址为:
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 / in地址栏。以及如何调试托管在本地主机上的服务?
此致 Asif Hameed
答案 0 :(得分:11)
在调试之前,您必须将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
答案 1 :(得分:1)
尝试浏览WCF的URL时出现“方法不允许”错误的原因有多种:
1)使用IIS未正确配置ASP.NET版本(为适当版本的.NET重新运行aspnet_regiis.exe应用程序)
2).svc文件未映射为使用aspnet_isapi.dll(再次运行aspnet_regiis.exe)
3)在 WCF框架之后安装了:对于这个,您需要运行此应用程序,其中'xx'是课程的版本: “%WINDIR%\ Microsoft.Net \ Framework \ xx \ Windows Communication Foundation \ ServiceModelReg.exe”-r
有关IIS / ASP.NET配置问题的进一步阅读,请查看this article ...
但是,我发现“方法不允许”的通常的原因是由于我在web.config中犯了一个错误:绑定信息中的拼写错误会导致它。看看你的web.config并确保URL正确无误。
如果你已经用尽了所有这些途径,并且仍然“不允许使用方法”,请尝试Service Trace Viewer Tool,它可以提供有关出错的更多信息。