【发布时间】:2011-04-22 05:22:25
【问题描述】:
我正在尝试使用 IIS 托管 WCF 服务(在 Cassini 中运行良好)。但是,当我在 IIS 中托管它时,出现以下错误:
“与服务器建立连接成功,但是在登录过程中发生错误。(提供者:共享内存提供者,错误:0 - 管道的另一端没有进程。)”
我认为这可能是由于IIS和Windows身份验证,所以我将连接字符串更改为使用uid和密码直接登录数据库,没有区别。我认为我没有走那么远,因为如果是这种情况,我会预料到一个 sql 安全错误。
我已经设置了一个全新的服务器(2008 年),但我仍然遇到同样的问题......
我需要实施什么设置才能实现这一目标?
WCF 代码示例
private GenericDataClassesDataContext _db = new GenericDataClassesDataContext();
public ReferenceValue[] GetReferenceValues()
{
try
{
return _db.ReferenceValues.ToArray();
}
catch (Exception e)
{
throw new FaultException(e.Message);
}
}
Web.Config
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings>
<!--<add name="TtasConnectionString" connectionString="Data Source=stdev07;Initial Catalog=Ttas;;uid=srvTtas;pwd=pa$$w0rd;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>-->
<add name="TTASConnectionString" connectionString="Data Source=STDEV07;Initial Catalog=IRF;Integrated Security=SSPI" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0">
</compilation>
<authentication mode="Windows"/>
<identity impersonate="true"/>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/></system.web>
<system.serviceModel>
<extensions>
<behaviorExtensions>
<add name="silverlightFaults" type="Moe.Tactical.GenericData.Wcf.SilverlightFaultBehavior, Moe.Tactical.GenericData.Wcf, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</behaviorExtensions>
</extensions>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
<behaviors>
<endpointBehaviors>
<behavior name="SilverlightFaultBehavior">
<silverlightFaults />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="Moe.Tactical.GenericData.Wcf.GenericDataServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<!--<serviceDebug includeExceptionDetailInFaults="false" />-->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<basicHttpBinding>
<binding name="winAuthBasicHttpBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="Moe.Tactical.GenericData.Wcf.GenericDataServiceBehavior" name="Moe.Tactical.GenericData.Wcf.GenericDataService">
<!--bindingConfiguration="winAuthBasicHttpBinding" [in gap]-->
<endpoint address=""
binding="basicHttpBinding"
behaviorConfiguration="SilverlightFaultBehavior"
contract="Moe.Tactical.GenericData.Wcf.IGenericDataService">
<identity>
<dns value="localhost:3637"/>
</identity>
</endpoint>
<!--<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>-->
</service>
</services>
</system.serviceModel>
</configuration>
【问题讨论】:
-
你需要的设置是“SHOW_FULL_EXCEPTION”和“POST_THE_CODE”
-
在旁注中,我无法弄清楚如何调试它(所以我无法获得完整的异常,并且 faultexception 不起作用......),就像我改变 VS使用 IIS 而不是 cassini,然后我收到错误“Internet Explorer 无法显示网页”
-
这里有一个想法:停止进食异常。完全摆脱那个 try/catch 块。这样,它可能会记录在 Windows 事件日志中。如果没有,请打开 WCF 跟踪并重试。它将在 WCF 日志中。
-
啊,当我打开跟踪时,错误消息更改为“用户 'IIS APPPOOL\GenericData' 登录失败”。这显然不是用户名!将进一步调查
标签: sql-server wcf iis-6