WCF调用服务失败
我能够在我自己的服务器中调用它,它可以工作,但是当我在IIS中托管wcf服务时会出现问题。此错误的详细信息如下...WCF调用服务失败
无法调用该服务。可能的原因:该服务离线 或无法访问;客户端配置与 代理不匹配;现有的代理无效。有关更多详细信息,请参阅 的堆栈跟踪。您可以尝试通过启动新代理,将 恢复为默认配置或刷新服务来进行恢复。
堆栈跟踪错误详细信息
服务器由于内部错误无法处理该请求。 有关错误的 IncludeExceptionDetailInFaults(无论是从ServiceBehaviorAttribute 或从
<serviceDebug>
配置行为)的服务器的详细信息,或者反过来在 为了将异常信息发送回客户端,或打开 跟踪按照微软.NET Framework 3.0 SDK文档和 检查服务器跟踪日志。服务器堆栈跟踪:
在System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(消息 回复,MessageFault故障,字符串动作,MessageVersion版本, FaultConverter faultConverter)
在System.ServiceModel.Channels.ServiceChannel.HandleReply (ProxyOperationRuntime 操作,ProxyRpc & RPC)
在System.ServiceModel.Channels.ServiceChannel.Call(字符串动作, 布尔单向,ProxyOperationRuntime操作,对象[]插件, 对象[]奏,时间跨度超时)
在System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage 包括MethodCall,ProxyOperationRuntime操作)
在System.ServiceModel.Channels.ServiceChannelProxy.Invoke(即时聊天 消息)[0]时异常重新抛出:
在System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(即时聊天 reqMsg,即时聊天retMsg)
在System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData & MSGDATA,的Int32类型)
在IUserService.GetUser(S特林用户ID)
在UserServiceClient.GetUser(字符串userid)
下面是源代码:
-
应用程序。从wcfservicelirbrary
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <compilation debug="true" /> </system.web> <system.serviceModel> <services> <service name="UserServiceLibrary.UserService"> <endpoint address="" binding="wsHttpBinding" contract="UserServiceLibrary.IUserService"> <identity> <dns value="localhost" /> </identity> </endpoint> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://localhost:8732/Design_Time_Addresses/UserServiceLibrary/UserService/" /> </baseAddresses> </host> </service> </services> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="True"/> <serviceDebug includeExceptionDetailInFaults="False" /> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
-
的Web配置文件配置文件从WCF网站主机
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="false" targetFramework="4.0" /> </system.web> <system.serviceModel> <services> <service name="UserServiceLibrary.UserService"> <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" contract="IMetadataExchange" /> <endpoint address="basic" binding="basicHttpBinding" bindingConfiguration="" contract="UserServiceLibrary.IUserService" /> <endpoint address="" binding="wsHttpBinding" contract="UserServiceLibrary.IUserService" /> </service> </services> <behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors> <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> </system.webServer> </configuration>
像往常一样与WCF的错误,关键是在堆栈跟踪的底部,最有可能的权利:
UserServiceClient.GetUser(String UserID)
这是什么导致了错误首先,
若要检查,如果您有权访问服务器,请尝试将Visual Studio调试程序附加到托管您的WCF代码的IIS服务(通常为w3wp.exe
)。 (通过Debug | Attach to Process ...执行此操作;您需要使用管理员权限运行,并选中“查看所有用户的进程”选项)。
如果您没有直接访问权将调试程序附加到服务,但可以调整该服务的配置文件,然后尝试WCF诊断跟踪(记录在MSDN here上)。这使您可以创建可以使用服务跟踪查看器查看的日志 - 您应该能够非常轻松地使用它查找有关该例外的更多信息。
一个预感:是UserID
null,有没有机会?如果是这样,并且你不期望它会发生,服务合同最近是否有变化?将服务查看器的诊断跟踪添加System.Runtime.Serialization
可以提供更多关于此的信息:详细信息here。
根据服务跟踪查看器,我得到这些错误消息 1.由于消息正文为空,因此无法读取正文。 2.没有可以通过动作'http://schemas.xmlsoap.org/ws/2004/09/transfer/Get'接受信息的频道。 3.用户'IIS APPPOOL \ ASP.NET v4.0'登录失败。 –
啊,最后一个听起来像是你的问题;我的猜测是IIS在您的服务器上配置错误。还有其他的ASP.NET 4应用程序的工作吗?如果是这样,请检查服务的应用程序池凭据,因为它听起来像无法初始化,因为它的凭据不正确。 –
@JeremyMcGee你是对的..这是我在应用程序池上的用户权限。谢谢:) – Muhammedh
确保运行托管服务的进程的帐户具有对数据库的访问权限。例如,在IIS的情况下,运行托管服务的应用程序池的帐户必须登录到数据库服务器,并且它必须具有在数据库中执行所有必要操作的权限。
复制了答案从http://stackoverflow.com/questions/6594001/access-denied-error-for-a-method-in-web-service – Muhammedh
最佳实践与WCF,
- 请与虚拟目录一起确保WCF项目网址是显示了没有错误,并能生成代理(SvcUtil工具其次是超链接)
2一旦WCF是在客户端项目中,在ServiceReferences中,使用上面的URL选择配置服务, 3.这应该生成代理,如果它附加到像TFS这样的源代码控制,请确保签入 - 删除模式签入,也可以使用新生成的ALONG文件(显示项目中的隐藏文件)
- 点击Reference.cs - >做一个严峻的考验,以验证生成新的datacontract或字段数据成员,即确认服务是高达日期
所有那些讨厌的WCF引用错误很难解决,但重新生成可能会减轻某些时间...
首先,转到服务器并应用以下配置更新: http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute .includeexceptiondetailinfaults.aspx – dotnetnate
另请看'UserServi ceClient.GetUser(String UserID)' - 这是最初发生异常的地方。发布你的代码和你从dotnetnate的建议获得的更多信息,以获得更好的答案:) – Tim
好的,我会先尝试.... –