由於某些要求,我必須爲多個服務版本使用單個svc。我使用不同的命名空間爲每個版本分離了接口合約。我只有一個類(部分)實現所有服務版本。使用單個SVC進行WCF服務版本控制
我的代碼是如下:
namespace Application.V1
{
[ServiceContract(Namespace = "http://google.com/ApplicationService/v1.0", Name = "IMathService")]
public interface IMathService
}
namespace Application.V2
{
[ServiceContract(Namespace = "http://google.com/ApplicationService/v2.0", Name = "IMathService")]
public interface IMathService
}
中的應用/ MathServiceV1.cs文件:
public partial class MathService : V1.IMathService { }
中的應用/ MathServiceV2.cs文件:
public partial class MathService : V2.IMathService { }
中的應用/ MathService.cs文件:
public partial class MathService {}
我已經添加在web.config中的服務如下:
<service behaviorConfiguration="ServiceBehavior" name="Application.MathService">
<endpoint address="V1" binding="wsHttpBinding" contract="Application.V1.IMathService" />
<endpoint address="V2" binding="wsHttpBinding" contract="Application.V2.IMathService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
我有一個文件MathService.svc
有以下幾點:
<%@ ServiceHost Service="Application.MathService, Application"
Factory="Autofac.Integration.Wcf.AutofacServiceHostFactory, Autofac.Integration.Wcf"%>
如果我生成的地址http://localhost:8000/MathService.svc
代理客戶端點生成如下:
<client>
<endpoint address="http://localhost:8000/MathService.svc/V1"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMathService"
contract="MathService.IMathService" name="WSHttpBinding_IMathService">
</endpoint>
<endpoint address="http://localhost:8000/MathService.svc/V2"
binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IMathService1"
contract="MathService.IMathService1" name="WSHttpBinding_IMathService1">
</endpoint>
</client>
我的濃度ern是用MathService.svc/V1
生成的客戶端端點地址,但我想看到V1/MathService.svc
。
如果我瀏覽地址爲http://localhost:8000/MathService.svc/V1
的服務,我得到的是HTTP 400 Bad Request
錯誤。
有什麼建議嗎?
請解釋您的意思,以便任何客戶端都可以瀏覽服務? – Jeroen
我的意思是說,如果地址格式在http:// localhost:8000/V1/MathService.svc而不是http:// localhost:8000/MathService.svc/V1中,enduser可以瀏覽該服務。 –