Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF双端点_Wcf - Fatal编程技术网

WCF双端点

WCF双端点,wcf,Wcf,我正在开发一个具有JSON行为的WCF服务,我想将其公开为REST和SOAP [ServiceContract] public interface ITicket { [WebGet] [OperationContract] Ticket[] GetAllTickets(); [WebGet(UriTemplate = "{value}")] [OperationContract] Ticket GetTicketById(int Id);

我正在开发一个具有JSON行为的WCF服务,我想将其公开为REST和SOAP

[ServiceContract]
public interface ITicket
{
    [WebGet]
    [OperationContract]
    Ticket[] GetAllTickets();

    [WebGet(UriTemplate = "{value}")]
    [OperationContract]
    Ticket GetTicketById(int Id);

    //[WebGet(UriTemplate = "{value}")]
    [OperationContract]
    Ticket[] GetTickets(string Ids);

    [OperationContract ]
    void AddTicket(Ticket ticket);

    [OperationContract ]
    void UpdateTicket(int Id);
}
我的配置设置是:

<service name="WCF_Rest_SOAP_JSON_Service.TicketService"
         behaviorConfiguration="TicketServiceBehavior" >
   <endpoint 
       address="soap" 
       behaviorConfiguration="SOAPEndPointBehavior" 
       binding="basicHttpBinding" 
       contract="WCF_Rest_SOAP_JSON_Service.ITicket"/>
   <endpoint 
       address="rest" 
       behaviorConfiguration="RESTEndPointBehavior" 
       binding="webHttpBinding" 
       contract="WCF_Rest_SOAP_JSON_Service.ITicket"/>
</service>

<behaviors>
  <serviceBehaviors>
    <behavior name="TicketServiceBehavior">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
  </serviceBehaviors>

  <endpointBehaviors>
    <behavior name="SOAPEndPointBehavior">
      <webHttp/>
    </behavior>
    <behavior name="RESTEndPointBehavior">
      <webHttp/>
    </behavior>
  </endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
我所做的是:

创建了一个空白解决方案 添加了WCF服务应用程序 现在我的问题是:

当我运行服务时,我直接进入IIS直接列表,单击我的服务后,我得到以下错误:

终点在'http://localhost:3505/TicketService.svc/soap'没有与None MessageVersion的绑定。'System.ServiceModel.Description.WebHttpBehavior'仅用于WebHttpBinding或类似绑定**

我还运行了WCFTestClient.exe,并在传递此url之后http://localhost:3505/TicketService.svc,我得到了以下错误:

未能添加服务。服务元数据可能无法访问。确保您的服务正在运行并公开元数据


我尝试了堆栈溢出的不同解决方案,但至今未成功。

对于第一个错误,您需要从SOAP端点行为中删除,并用更合适的方法替换它,例如@Alex找不到任何兼容的选项或开始,请您进一步说明。抱歉,那我的错。如果你只是从SoapEndpoint中删除了,它会工作吗?@Alex我注释掉了接口中的所有方法,除了第一个方法,删除了,它工作了,但是现在还有2个问题1。如果我取消对第二个方法的注释并尝试运行我的服务,它会说契约“ITicket”中的错误操作“GetTicketById”有一个UriTemplate,该模板需要一个名为“VALUE”的参数,但该操作上没有具有该名称的输入参数。2.在运行第一个方法时,我如何知道我正在将服务作为SOAP或REST使用?编辑:@AlexBarac现在我也可以运行第二个方法,但第二个问题仍然存在,即不知道我是否正在将这些方法作为REST或SOAP进行测试?