2015-05-29 128 views
3

我无法找出WCF服务出现问题,此服务在我为其扩展功能实施“v2”合同后出现。一切都很好,但当我尝试访问浏览器中的服务时,我只会被告知它无法连接。当我尝试将其添加为服务参考时,我会收到有关连接问题的类似消息。但是,当我从配置文件中删除扩展合同的端点,并保持原来的“v1”版本不变时,它可以正常工作。版本控制服务合约后无法访问WCF服务

这里是 “V1” 合同:

namespace Company.Services.Ticketing.Retail.Contracts 
{ 
    [ServiceContract(Name = "OutletReportingContract_v1", Namespace = "https://enterprise.company.ie/Services/Retail")] 
    public interface IOutletReportingContract_v1 
    { 
     /* methods */ 
    } 
} 

这里是 “V2” 的合同:

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.HostedHttpRequestAsyncResult/28075619 异常:System.Web.HttpException(0x80004005):没有在'https://phil-pc.company.local/Services/Retail/OutletService.svc/_vti_bin/ListData.svc/ $ metadata'上有效监听的频道。这通常是由不正确的地址URI造成的。确保消息发送到的地址与服务正在侦听的地址匹配。 ---> System.ServiceModel.EndpointNotFoundException:没有频道在'https://phil-pc.company.local/Services/Retail/OutletService.svc/_vti_bin/ListData.svc/ $ metadata'上积极监听。这通常是由不正确的地址URI造成的。确保消息发送到的地址与服务正在侦听的地址匹配。 在System.ServiceModel.Activation.HostedHttpTransportManager.HttpContextReceived(HostedHttpRequestAsyncResult结果) 在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.HandleRequest() 在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.BeginRequest() 在System.Runtime.AsyncResult.End [TAsyncResult](IAsyncResult的结果) 在System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult的结果) 进程名称:W3WP 进程ID:8148

现在有点难倒并希望任何帮助:)

回答

0

你需要在web.config中分开你的服务声明。

假设你的实现类被命名为OutletService_v1 & OutletService_v2你应该这样的事情结束了:

<services> 
 
    <service name="Company.Services.Ticketing.Retail.OutletService_v1" behaviorConfiguration="Public"> 
 
    <endpoint binding="wsHttpBinding" bindingConfiguration="Standard" contract="Company.Services.Ticketing.Retail.Contracts.IOutletReportingContract_v1" /> 
 
    <endpoint address="mex" binding="mexHttpsBinding" name="IMetadataExchange" contract="IMetadataExchange" /> 
 
    </service> 
 

 
    <service name="Company.Services.Ticketing.Retail.OutletService_v2" behaviorConfiguration="Public"> 
 
    <endpoint binding="wsHttpBinding" bindingConfiguration="Standard" contract="Company.Services.Ticketing.Retail.Contracts.IOutletReportingContract_v2" /> 
 
    <endpoint address="mex" binding="mexHttpsBinding" name="IMetadataExchange" contract="IMetadataExchange" /> 
 
    </service> 
 
</services>

+0

嘿,感谢您的回复! 我其实忘了添加v2合约从v1合约继承的事实,我已更新我的帖子以反映这一点。 关于您的解决方案,问题在于我在帖子中使用的格式对另一项服务工作正常,并且在实施中没有明显差异。 – achillesminor