wcf Rest服务中的POST方法

时间:2011-08-22 07:50:48

标签: c# wcf

  

可能重复:
  POST Method in wcf Rest Service

我无法在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);  
        } 

它返回错误:找不到远程服务器,有时候 服务器没有提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的。

3 个答案:

答案 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服务以及如何使用它们

  1. Building WCF Rest Service

  2. Invoke the WCF Rest Service using .NET Client