我需要调试为Sharepoint 2010部署的Sharepoint WCF服务。但是,同事需要调试部署在同一台物理机上的另一个Sharepoint服务。如果我们同时调试Visual Studio调试器会发生奇怪的事情。例如,他的调试器会在我设置的断点处中断,或者我看到他的代码引发的异常。请注意,我们正在调试不同解决方案中的不同服务。从我到目前为止收集的信息来看,这种行为是这样的,因为每个应用程序池只有一个Visual Studio Debugger实例附加到的w3wp进程。 所以我想我应该尝试在另一个应用程序池中运行我的服务以获取要附加的不同w3wp.exe。这是我尝试过的,但我不确定,如果我的尝试有任何意义,请澄清:
IIS管理器显示有两个不同的Sharepoint应用程序池(不包括Central Adminisitration的应用程序池)和每个应用程序池的站点。因此,我尝试使用其他应用程序池部署我的服务,方法是将部署位置设置为其他站点的URL。但是,服务的虚拟_vti_bin目录仍映射到同一物理目录...\Web Server Extensions\14\ISAPI\
。从Visual Studio部署工作,但获得ServiceReference不起作用。尝试打开<url>/_vti_bin/MyService.svc/MEX
会显示一个错误页面,告诉我其中已存在与URL关联的绑定实例。所以,我想这可能不是这样做的方式,或者根本不可能以这种方式“隔离”服务。我对IIS管理器或Sharepoint管理中心设置的反复试验非常犹豫,因为我觉得我不太了解,以免搞砸了。
有人能告诉我如何解决这个问题吗?
答案 0 :(得分:1)
在Visual Studio中部署时指定的URL可能会产生误导。如果您有沙盒解决方案,则会将其部署到此位置。如果您有一个服务器场解决方案,它将集中部署,并使用URL来确定要回收的应用程序池。如果您在解决方案中有特定于Web应用程序的设置,即safecontrols),这些将应用于托管URL的Web应用程序。
_vti_bin可用于整个服务器场中的每个站点;就像_layouts一样。由于服务将通过多个URL(每个站点一个)公开,因此SharePoint团队已创建自定义工厂类以实现此目的。查看一个内置的svc文件,你会发现它使用了一个特殊的工厂类。在您的svc文件中使用此选项可在所有站点中公开您的服务。
至于调试,让多个开发人员使用同一台机器绝不是一个好主意。如果您真的想这样做,我建议使用两个具有不同应用程序池的Web应用程序。这样每个开发人员都有自己的附加进程。如果您对应用程序池使用不同的帐户,则可以更容易地在“附加进程”对话框中找到正确的帐户。