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
C# Can';在对服务合同进行版本控制后,无法访问WCF服务_C#_Wcf_Iis - Fatal编程技术网

C# Can';在对服务合同进行版本控制后,无法访问WCF服务

C# Can';在对服务合同进行版本控制后,无法访问WCF服务,c#,wcf,iis,C#,Wcf,Iis,在我为WCF服务实现了“v2”合同以扩展其功能后,WCF服务出现了一个问题,我很难解决这个问题。一切都很好,但当我尝试在浏览器中访问服务时,我只是被告知它无法连接。当我尝试将其添加为服务引用时,我会收到一条关于连接问题的类似消息。但是,当我从配置文件中删除扩展契约的端点,并保持以前的“v1”版本不变时,它工作正常 以下是“v1”合同: namespace Company.Services.Ticketing.Retail.Contracts { [ServiceContract(Name

在我为WCF服务实现了“v2”合同以扩展其功能后,WCF服务出现了一个问题,我很难解决这个问题。一切都很好,但当我尝试在浏览器中访问服务时,我只是被告知它无法连接。当我尝试将其添加为服务引用时,我会收到一条关于连接问题的类似消息。但是,当我从配置文件中删除扩展契约的端点,并保持以前的“v1”版本不变时,它工作正常

以下是“v1”合同:

namespace Company.Services.Ticketing.Retail.Contracts
{
    [ServiceContract(Name = "OutletReportingContract_v1", Namespace = "https://enterprise.company.ie/Services/Retail")]
    public interface IOutletReportingContract_v1
    {
        /* methods */
    }
}
namespace Company.Services.Ticketing.Retail.Contracts
{
    [ServiceContract(Name = "OutletReportingContract_v2", Namespace = "https://enterprise.company.ie/Services/Retail")]
    public interface IOutletReportingContract_v2 : IOutletReportingContract_v1
    {
        /* methods */
    }
}
这是“v2”合同:

namespace Company.Services.Ticketing.Retail.Contracts
{
    [ServiceContract(Name = "OutletReportingContract_v1", Namespace = "https://enterprise.company.ie/Services/Retail")]
    public interface IOutletReportingContract_v1
    {
        /* methods */
    }
}
namespace Company.Services.Ticketing.Retail.Contracts
{
    [ServiceContract(Name = "OutletReportingContract_v2", Namespace = "https://enterprise.company.ie/Services/Retail")]
    public interface IOutletReportingContract_v2 : IOutletReportingContract_v1
    {
        /* methods */
    }
}
以下是Web.config中的端点:

  <service name="Company.Services.Ticketing.Retail.OutletService" behaviorConfiguration="Public">
    <endpoint address="1" binding="wsHttpBinding" bindingConfiguration="Standard" name="OutletReportingContract_v1" 
        contract="Company.Services.Ticketing.Retail.Contracts.IOutletReportingContract_v1" />
    <endpoint address="2" binding="wsHttpBinding" bindingConfiguration="Standard" name="OutletReportingContract_v2" 
        contract="Company.Services.Ticketing.Retail.Contracts.IOutletReportingContract_v2" />
    <endpoint address="mex" binding="mexHttpsBinding" name="IMetadataExchange" contract="IMetadataExchange" />
  </service>

以下是事件查看器中显示的错误消息:

WebHost无法处理请求。 发件人信息:System.ServiceModel.Activation.HostedHttPrequesStatAsyncResult/28075619 异常:System.Web.HttpException(0x80004005):在“$metadata”处没有正在侦听的通道。这通常是由不正确的地址URI引起的。确保消息发送到的地址与服务正在侦听的地址匹配。-->System.ServiceModel.EndpointNotFoundException:没有正在侦听“$metadata”的通道。这通常是由不正确的地址URI引起的。确保消息发送到的地址与服务正在侦听的地址匹配。 位于System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult结果) 在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandlerRequest()中 在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest()中 在System.Runtime.AsyncResult.End[TAsyncResult](IAsyncResult结果) 在System.ServiceModel.Activation.HostedHttPrequesStatAsyncResult.End(IAsyncResult结果)处 进程名称:w3wp 进程ID:8148


现在有点为难了,希望您能提供帮助:)

您需要在web.config中分离您的服务声明

假设您的实现类名为OutletService_v1和OutletService_v2,那么您应该得到如下结果:


嘿,谢谢你的回复!实际上我忘了添加v2合同继承v1合同的事实,我已经更新了我的帖子来反映这一点。关于您的解决方案,问题是我在帖子中使用的格式对于另一个服务来说效果很好,并且在实现中没有明显的差异。