我无法在wcf Rest服务中使用POST方法。请帮助以下代码
接口实施
[OperationContract]
[WebInvoke( UriTemplate = "/SendMail",Method ="POST", ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Bare)]
EmailDetails SendMail(EmailDetails rData);
protected void Button1_Click(object sender, EventArgs e)
{
BasicHttpBinding binding = new BasicHttpBinding();
binding.ReaderQuotas.MaxStringContentLength = 2000000;
binding.ReaderQuotas.MaxNameTableCharCount = 2147483647;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.CloseTimeout = new TimeSpan(4, 0, 0);
binding.OpenTimeout=new TimeSpan(4, 0, 0);
binding.ReceiveTimeout=new TimeSpan(2, 0, 0);
binding.SendTimeout = new TimeSpan(5, 0, 0);
EndpointAddress endpoint = new EndpointAddress(new Uri("http://localhost:35798/RestServiceImpl.svc"));
RestPostService.RestServiceImplClient obj = new RestPostService.RestServiceImplClient(binding, endpoint);
RestPostService.EmailDetails obj1 = new RestPostService.EmailDetails();
obj.ClientCredentials.Windows.ClientCredential = System.Net.CredentialCache.DefaultNetworkCredentials;
RestPostService.EmailDetails obj2=obj.SendMail(obj1);
}
它返回错误:找不到远程服务器,有时候 服务器没有提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的。
答案 0 :(得分:1)
如果您是webservice的所有者和使用者,请尝试删除WebInvokeAttribute。或者至少删除UriTemplate。仅查看按钮单击中提供的代码,不需要它,可能会导致您的问题。
答案 1 :(得分:0)
将它放在您的web.config文件中,它将帮助您找出您的Web服务无法正常工作的原因:
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\temp\WEBTraces.log" />
</listeners>
</source>
</sources>
</system.diagnostics>
在此处阅读更多内容:http://msdn.microsoft.com/en-us/library/ms733025.aspx
答案 2 :(得分:0)
REST使用带有Get / Post / Put / Delete动词的简单Http协议。
BasicHttpBinding用于基于SOAP的Web服务。
为了使用Http协议的POST动词向WCF服务发出请求,您需要使用WebRequest类或某些第三方库,如RestSharp。
使用REST样式时,客户端和服务器之间没有任何代理方式来执行基于SOAP的Web服务中的请求。
查看以下链接以构建一些REST WCF服务以及如何使用它们