相关疑难解决方法(0)

ServiceRoute + WebServiceHostFactory杀死WSDL生成?如何使用?wsdl创建无扩展的WCF服务

我正在尝试使用无扩展/ .svc-less WCF服务.任何人都可以确认或否认我遇到的问题吗?

我在代码中使用路由,并在global.asax.cs的Application_Start中执行此操作:

RouteTable.Routes.Add(new ServiceRoute("Data", new WebServiceHostFactory(), typeof(DataDips)));
Run Code Online (Sandbox Code Playgroud)

我已经在IIS 6和IIS 7.5中进行了测试,我可以很好地使用该服务(即我的无扩展通配符映射处理程序配置正确指向ASP.NET).但是,元数据生成完全搞砸了.我可以使用WCF测试客户端(我假设svcutil.exe)命中我的/ mex端点 - 但是你通常使用.svc生成的?wsdl是toast.我无法用浏览器命中它(获得400个错误请求),我无法使用wsdl.exe等命中它.在web.config中正确配置了元数据生成.

这当然是一个问题,因为该服务作为basicHttpBinding公开,因此旧式ASMX客户端可以访问它.但是,当然,如果没有WSDL描述,客户端就无法生成代理.

如果我改为在这样的配置中使用serviceActivation路由,而不是在代码中注册路由:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
  <serviceActivations>
    <add relativeAddress="Data.svc" service="DataDips" />
  </serviceActivations>
</serviceHostingEnvironment>
Run Code Online (Sandbox Code Playgroud)

那么瞧...它有效.

但后来我没有一个干净的无扩展网址.如果我将relativeAddress从Data.svc更​​改为Data,那么我会得到一个配置异常,因为config不支持.(必须使用注册到WCF的扩展).

我也尝试将此代码与上面的配置结合使用:

RouteTable.Routes.MapPageRoute("","Data/{*data}","~/Data.svc/{*data}",false);
Run Code Online (Sandbox Code Playgroud)

我的想法是,我可以将无扩展名的URL指向配置的.svc网址.这不起作用 - /data.svc继续工作,但/ Data返回404.

如果在这样的配置中使用urlMappings,并且与上面的serviceActivation结合使用,我确实找到了解决办法:

<urlMappings>
   <add url="~/Data" mappedUrl="Data.svc"/>
</urlMappings>
Run Code Online (Sandbox Code Playgroud)

这个问题有两个方面 - 1.看起来很复杂2.在生成的WSDL中,操作端点仍然引用Data.svc /而不是Data/ - 因此依赖于Data.svc实际存在/响应.

这不是我想要的,即使它有点/有点解决问题.

是否有正确的方法来获得无扩展的WCF服务URL以正确生成WSDL?

.net iis service wcf

21
推荐指数
1
解决办法
1万
查看次数

WCF删除.svc扩展名

我可以通过以下帖子将ServiceRoute添加到我的WCF .net 4.0服务,扩展名为.svc:

  1. 发布1
  2. 发布2

但是,如何删除".svc"扩展名?

我的实际服务文件名为Catalog.svc

在关注这些帖子后,我可以使用csw.svc访问相同的服务

我的Global.asa.cs:

protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

private void RegisterRoutes(RouteCollection routes)
{
    routes.Add(new ServiceRoute("csw.svc", new WebServiceHostFactory(), typeof(CSW_ebRIM_WebService.Catalog)));
}
Run Code Online (Sandbox Code Playgroud)

我的Web.config:

...
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" >
   <serviceActivations>
      <add factory="System.ServiceModel.Activation.ServiceHostFactory"
           relativeAddress="~/csw.svc"
           service="CSW_ebRIM_WebService.Catalog"/>
   </serviceActivations>          
</serviceHostingEnvironment>
<system.webServer>
   <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
   </modules>
   <handlers>
       <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/>
   </handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

但是,如果我.svc从全局和web.config我得到的错误中删除扩展并且错误说:

配置文件中"system.serviceModel/serviceHostingEnvironment/serviceActivations"部分下的注册relativeAddress'〜/ csw'没有扩展名.

如果我把.svc扩展名放回去web.config并且只从全局删除它我得到: …

.net wcf visual-studio-2010

6
推荐指数
1
解决办法
5380
查看次数

标签 统计

.net ×2

wcf ×2

iis ×1

service ×1

visual-studio-2010 ×1