我正在探索在不使用SPWebConfigModification类或手动编辑web.config的情况下,通过SharePoint功能将WCF服务部署到SharePoint场/ WebApplication /站点/ Web的可能性。 Gille virtual path fix已经应用,所以它不会考虑到这一点。到目前为止我能够得到的最远的是创建一个自定义的ServiceHostFactory类,我在.svc文件中引用它是这样的:
<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.ServiceClass" Factory="Company.Namespace.CustomServiceHostFactory" %>
<%@ Assembly Name="Company.WCFCustomLib, Version=1.0.0.0, Culture=neutral, PublicKeyToken=0000000000000000" %>
我在我的自定义服务主机工厂内覆盖ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
并在其中应用各种绑定/端点配置。但我遇到的问题是,当我在Web浏览器中查询.svc文件时,甚至没有调用该方法。我的印象是IIS会在我的Web浏览器中调用.svc后立即尝试使用我指定的ServiceHostFactory创建ServiceHost。我完全错了吗?有没有人曾试图做过这样的事情?如果是这样,有什么我想念的吗?是否可以完全以编程方式设置ServiceHost,还是我仍然需要在web.config中使用<system.serviceModel>
标签?
答案 0 :(得分:2)
您可以执行您想要的操作,并让WCF从您喜欢的位置读取配置。我构建了一次,允许每个WCF服务从自己的配置文件中读取。适合测试和独立部署。该技术涉及覆盖ServiceHost.ApplyConfiguration方法。
This blog post有一些额外的详细信息和完整的源代码。
另一种普遍感兴趣的方法可能是让WCF服务从某个地方的集中存储读取其配置 - 数据库,远程文件服务器等。您可以使用相同的基本CustomServiceHost,只需修改一个方法即可从中加载数据库,或其他什么。
ps:我怀疑,IIS正在消失的原因是你在WCF ServiceHost中发生异常。
答案 1 :(得分:0)
可能不是您正在寻找的答案,但我已经详细介绍了如何在SharePoint深度维基here上在SharePoint中使用类似WCF的功能。我详细介绍了如何使用HttpHandler代替WCF,但我也在SharePoint中有一些完整的WCF链接。
在HttpHandler方法中,您不需要修改根web.config文件,但是您需要在自己的文件夹中添加web.config文件。
我希望这能提供一些见解。