我正在使用.NET 4 WCF来公开以下REST-full webservice
[OperationContract]
[WebGet]
void Test();
由于这是一个面向开发人员的程序,我想支持REST完全HTTP开发人员以及喜欢使用WSDL的开发人员。我的方法是声明服务两次以公开传统的WSDL和REST端点:
的Web.config
<serviceHostingEnvironment aspNetCompatibilityEnabled="True" multipleSiteBindingsEnabled="true" >
<serviceActivations >
<add relativeAddress ="~/KeyService.svc" service="SecretDistroMVC3.Services.KeyService3"/>
</serviceActivations>
</serviceHostingEnvironment>
Global.asax中
void Application_Start(object sender, EventArgs e)
{
// The following enables the WCF REST endpoint
//ASP.NET routing integration feature requires ASP.NET compatibility. Please see
// 'http://msdn.microsoft.com/en-us/library/ms731336.aspx
RouteTable.Routes.Add(new ServiceRoute("KeyService3", new WebServiceHostFactory(), typeof(KeyService3)));
问题
由于我不希望在两个位置声明服务,如何在配置中配置两个端点,或在Application_Start
中配置两个端点?
实施例
答案 0 :(得分:0)
在web.config文件中执行此操作可能比通过代码更容易。您可以按照下面显示的部分配置行配置您的服务。我通常将服务实现和WSDL&amp; REST接口命名空间,使配置更容易理解,但它是可选的。绑定和行为配置名称仅用于清楚地显示如何根据需要在各自的serviceModel元素中调整这些名称。
由于您不希望服务的WSDL版本受ASP.NET URL路由的影响,因此我将其基址设置为其端点中的... / Wsdl / KeyService3.svc。
<service name="YourNamespace.Impl.KeyService3" behaviorConfiguration="yourServiceBehaviorSettings">
<!-- Service Endpoints -->
<endpoint address="Wsdl"
binding="wsHttpBinding"
bindingConfiguration="Http"
contract="YourNamespace.Wsdl.IKeyService3" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
<endpoint address="Services"
behaviorConfiguration="webBehavior"
binding="webHttpBinding"
name="webHttp"
contract="YourNamespace.IKeyService3"
listenUriMode="Explicit" />
</service>