C# 如何在asp.net的Windows服务中调用WCF RESTful服务?

C# 如何在asp.net的Windows服务中调用WCF RESTful服务?,c#,asp.net,wcf,windows-services,wcf-rest,C#,Asp.net,Wcf,Windows Services,Wcf Rest,我已经为WCF RESTfule服务中的POST方法创建了以下操作合同 IService1.cs:- [OperationContract] [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "/SaveCustomerPost", BodyStyle = WebMessageBodyStyle.Wrapped)] string SaveCustomerDetails(Cust

我已经为WCF RESTfule服务中的POST方法创建了以下操作合同

IService1.cs:-

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "/SaveCustomerPost",
 BodyStyle = WebMessageBodyStyle.Wrapped)]
  string SaveCustomerDetails(CustomerDetails objCustomerDetails);  

[DataContract]
public class CustomerDetails
{
  [DataMember]
  public string Name { get; set; }      
}
using (WebChannelFactory<ServiceReference1.IService1> cf = new WebChannelFactory<ServiceReference1.IService1>(new Uri("http://xxx/CustomerService.svc/SaveCustomerPost")))
{
   var helloService = cf.CreateChannel();
   ServiceReference1.CustomerDetails objCustomerDetails = new ServiceReference1.PANNoDetails();
   objPANNoDetails.Name = "TestName";           
   string strResult = helloService.SaveCustomerDetails(objPANNoDetails);
}
<system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="CustBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="WebHttpBinding" sendTimeout="00:05:00" maxBufferSize="2147483647"
          maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
          transferMode="Streamed">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None" />
        </binding>
      </webHttpBinding>
    </bindings>
    <client>
      <endpoint address=""
          binding="webHttpBinding" behaviorConfiguration="CustBehavior"
          contract="ServiceReference1.ICustService" name="WebHttpBinding" />
    </client>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0"/>
  </system.serviceModel>
Windows服务:-

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "/SaveCustomerPost",
 BodyStyle = WebMessageBodyStyle.Wrapped)]
  string SaveCustomerDetails(CustomerDetails objCustomerDetails);  

[DataContract]
public class CustomerDetails
{
  [DataMember]
  public string Name { get; set; }      
}
using (WebChannelFactory<ServiceReference1.IService1> cf = new WebChannelFactory<ServiceReference1.IService1>(new Uri("http://xxx/CustomerService.svc/SaveCustomerPost")))
{
   var helloService = cf.CreateChannel();
   ServiceReference1.CustomerDetails objCustomerDetails = new ServiceReference1.PANNoDetails();
   objPANNoDetails.Name = "TestName";           
   string strResult = helloService.SaveCustomerDetails(objPANNoDetails);
}
<system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="CustBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="WebHttpBinding" sendTimeout="00:05:00" maxBufferSize="2147483647"
          maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
          transferMode="Streamed">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None" />
        </binding>
      </webHttpBinding>
    </bindings>
    <client>
      <endpoint address=""
          binding="webHttpBinding" behaviorConfiguration="CustBehavior"
          contract="ServiceReference1.ICustService" name="WebHttpBinding" />
    </client>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0"/>
  </system.serviceModel>
使用(WebChannelFactory cf=新的WebChannelFactory(新的Uri(“http://xxx/CustomerService.svc/SaveCustomerPost")))
{
var helloService=cf.CreateChannel();
ServiceReference1.CustomerDetails objCustomerDetails=新的ServiceReference1.PanNodeDetails();
objPANNoDetails.Name=“TestName”;
字符串strResult=helloService.SaveCustomerDetails(objPANNoDetails);
}
客户端应用程序配置:-

[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, UriTemplate = "/SaveCustomerPost",
 BodyStyle = WebMessageBodyStyle.Wrapped)]
  string SaveCustomerDetails(CustomerDetails objCustomerDetails);  

[DataContract]
public class CustomerDetails
{
  [DataMember]
  public string Name { get; set; }      
}
using (WebChannelFactory<ServiceReference1.IService1> cf = new WebChannelFactory<ServiceReference1.IService1>(new Uri("http://xxx/CustomerService.svc/SaveCustomerPost")))
{
   var helloService = cf.CreateChannel();
   ServiceReference1.CustomerDetails objCustomerDetails = new ServiceReference1.PANNoDetails();
   objPANNoDetails.Name = "TestName";           
   string strResult = helloService.SaveCustomerDetails(objPANNoDetails);
}
<system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="CustBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <bindings>
      <webHttpBinding>
        <binding name="WebHttpBinding" sendTimeout="00:05:00" maxBufferSize="2147483647"
          maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
          transferMode="Streamed">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
          <security mode="None" />
        </binding>
      </webHttpBinding>
    </bindings>
    <client>
      <endpoint address=""
          binding="webHttpBinding" behaviorConfiguration="CustBehavior"
          contract="ServiceReference1.ICustService" name="WebHttpBinding" />
    </client>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" minFreeMemoryPercentageToActivateService="0"/>
  </system.serviceModel>

在“xxx.svc/SaveCustomerDetails”上没有可以接受消息的端点侦听。这通常是由不正确的地址或SOAP操作引起的。有关更多详细信息,请参阅InnerException(如果存在)。


当我在窗口服务中用WebInvoke方法调用上述方法时,我得到了上述错误。当我在不使用WebInvoke方法的情况下调用上述服务时,服务工作正常。如何解决上述问题?

创建
通道工厂时,请尝试仅指定服务名称:

using (ChannelFactory<ServiceReference1.ICustService> factory = new ChannelFactory<ServiceReference1.ICustService>(
    new WebHttpBinding(),
    "http://xxx/CustomerService.svc"))
{
}
使用(ChannelFactory工厂=新的ChannelFactory工厂(
新建WebHttpBinding(),
"http://xxx/CustomerService.svc"))
{
}

创建
通道工厂时,请尝试仅指定服务名称:

using (ChannelFactory<ServiceReference1.ICustService> factory = new ChannelFactory<ServiceReference1.ICustService>(
    new WebHttpBinding(),
    "http://xxx/CustomerService.svc"))
{
}
使用(ChannelFactory工厂=新的ChannelFactory工厂(
新建WebHttpBinding(),
"http://xxx/CustomerService.svc"))
{
}

我在问题中屏蔽了IP地址。没有WebInvoke服务处理上述代码。我在问题中屏蔽了IP地址。没有WebInvoke服务使用上述代码。