在BizTalk 2010中公开wcf服务

时间:2012-12-28 02:13:02

标签: wcf biztalk biztalk-2010

过去几周我遇到过这个问题,我仍然无法弄清楚原因。

我有一个BizTalk业务流程,它接收BizTalk消息,处理它并最终将其写入文件。为简单起见,我们的目标是获取消息(实际上是一个调查)并将其保存到文件夹中。我创建了一个公共接收端口来捕获msg和一个发送端口来将结果写入磁盘。

我已成功部署该项目并已成功将其发布到IIS。我能够在IIS中看到WCF服务并将其设置为使用Framework 4.0。我已经设置了所有相关的接收和发送端口,并已从BizTalk管理控制台成功启动了应用程序。 (当我发布wcf服务时,接收位置是自动创建的,发送位置是位于计算机文件夹中的FILE类型)

从IIS中的DefaultSite,我可以看到我的WCF。但是,当我尝试http://localhost/TestSurvey/TestSurvey_Orchestration_1_getSurveyPort.svc,时 我收到以下错误:

Server Error in '/TestSurvey' Application.
--------------------------------------------------------------------------------

Login failed for user 'Domain\ComputerName$'. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Data.SqlClient.SqlException: Login failed for user 'ACAD1\DENBIZDEV$'.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[SqlException (0x80131904): Login failed for user 'Domain\ComputeName$'.]

[TargetInvocationException: Exception has been thrown by the target of an invocation.]
   Microsoft.BizTalk.TransportProxy.Interop.IBTTransportProxy.RegisterIsolatedReceiver(String url, IBTTransportConfig callback) +0
   Microsoft.BizTalk.Adapter.Wcf.Runtime.WcfIsolatedReceiver`2.RegisterIsolatedReceiver(Uri uri) +1028
   Microsoft.BizTalk.Adapter.Wcf.Runtime.WebServiceHostFactory`3.CreateServiceHost(String constructorString, Uri[] baseAddresses) +363
   System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +1413
   System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +50
   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +1172

[ServiceActivationException: The service '/TestSurvey/TestSurvey_Orchestration_1_getSurveyPort.svc' cannot be activated due to an exception during compilation.  The exception message is: Exception has been thrown by the target of an invocation..]
   System.Runtime.AsyncResult.End(IAsyncResult result) +901424
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +178638
   System.Web.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) +107

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272 

我的问题是:BizTalk尝试登录的是什么? Domain \ ComputerName $绝对不是用户。我没有尝试从业务流程访问任何数据库。我相信我的IIS设置正确,因为我从VS2010创建了一个快速而脏的wcf服务测试并将其发布到我的IIS,然后成功创建了一个简单的客户端来使用wcf服务测试。当我直接创建wcf服务测试时,我没有遇到同样的问题。

非常感谢任何帮助或提示!

修改

我设法解决了这个问题:它不是由BizTalk创建的Web配置。我不得不创建一个特殊的应用程序池并将我的应用程序绑定到使用它。在应用程序池中,我必须使用BizTalk正在使用的自定义凭据。使用内置凭据导致我遇到的问题。我的菜鸟错误!一旦使用了BizTalk登录凭证,一切进展顺利。

1 个答案:

答案 0 :(得分:4)

抛出SQL异常的数据库是BizTalk数据库之一,可能是管理或SSO数据库。

错误几乎肯定是由IIS的设置引起的,无论是应用程序池标识还是网站安全设置。

什么是hapenning是当你第一次调用服务时IIS正在编译你的服务,并且这样做显然需要访问其中一个BizTalk数据库,但是这个调用由于某种原因没有经过身份验证。

这可能是因为应用程序池用户必须是 BizTalk独立主机用户组的成员(根据BizTalk的设置方式,可能会将其称为不同的东西。