C# Can';在对服务合同进行版本控制后,无法访问WCF服务
在我为WCF服务实现了“v2”合同以扩展其功能后,WCF服务出现了一个问题,我很难解决这个问题。一切都很好,但当我尝试在浏览器中访问服务时,我只是被告知它无法连接。当我尝试将其添加为服务引用时,我会收到一条关于连接问题的类似消息。但是,当我从配置文件中删除扩展契约的端点,并保持以前的“v1”版本不变时,它工作正常 以下是“v1”合同:C# Can';在对服务合同进行版本控制后,无法访问WCF服务,c#,wcf,iis,C#,Wcf,Iis,在我为WCF服务实现了“v2”合同以扩展其功能后,WCF服务出现了一个问题,我很难解决这个问题。一切都很好,但当我尝试在浏览器中访问服务时,我只是被告知它无法连接。当我尝试将其添加为服务引用时,我会收到一条关于连接问题的类似消息。但是,当我从配置文件中删除扩展契约的端点,并保持以前的“v1”版本不变时,它工作正常 以下是“v1”合同: namespace Company.Services.Ticketing.Retail.Contracts { [ServiceContract(Name
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合同的事实,我已经更新了我的帖子来反映这一点。关于您的解决方案,问题是我在帖子中使用的格式对于另一个服务来说效果很好,并且在实现中没有明显的差异。