none
在IIS6上发布WDF,无法访问数据库 RRS feed

  • 问题

  • 我在VS2010上开发WCF,连接Oracle数据库没问题,但是部署到IIS6上,就连不上数据库了?请大家帮忙分析一下原因啊

    The server was unable to process the request due to an internal error. For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs.

    Server stack trace:
    at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)
    at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
    at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
    at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
    at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

    Exception rethrown at [0]:
    at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
    at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
    at IBookService.GetAllBooks()
    at BookServiceClient.GetAllBooks()

    2011年5月10日 6:33

全部回复

  • 你确定是数据库连接的问题?

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年5月10日 12:20
    版主
  • 部分代码如下: public List<User> doQueryAll() { List<User> listUser = new List<User>(); string connString = ConfigurationManager.AppSettings["OraReg"]; OracleConnection conn = new OracleConnection(connString); try { conn.Open(); Console.WriteLine("Connection opening."); OracleCommand oraCmd = conn.CreateCommand(); oraCmd.CommandText = "select ID, NAME, PHONE from MYUSER"; OracleDataReader odr = oraCmd.ExecuteReader(); 如果没有数据库访问,就可以运行,添加数据库访问的代码后, 加上conn.Open()就出错了, 我觉的不是IIS的问题,在WCF的工程里通过wcftestclient.exe运行没有问题, 建一个WCF WebSite工程,运行“wcftestclient wcf地址“就出错, 在微软的网站找的学习资料,建WCF WebSite工程很简单的,没有涉及到需要连接数据库时,建WCF WebSite还要添加哪些引用, 我想可能是需要添加一些引用吧,请大家多多指点啊。我可以把代码发给大家,非常感谢。
    2011年5月11日 1:39
  • WCF WebSite工程的web.config文件: <?xml version="1.0"?> <configuration> <system.web> <compilation debug="false" targetFramework="4.0"> <assemblies> <add assembly="System.ServiceModel.Channels, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.ServiceModel.Discovery, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.ServiceModel.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Data.Services.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> <add assembly="System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/></assemblies></compilation> </system.web> <system.serviceModel> <services> <service name="RegService.UserService"> <endpoint address="regBasic" binding="basicHttpBinding" bindingConfiguration="" name="RegPoint" contract="RegService.IUserService"/> <host> <timeouts openTimeout="00:01:00"/> </host> </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>
    2011年5月11日 1:49
  • 通过WCF WebSite访问Oralcle数据库,是不是通信协议有问题?
    2011年5月11日 3:08
  • 你单独单元测试一下你的数据库连接的代码。不经过WCF服务包装的。

    看看可行不。


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年5月11日 12:50
    版主
  • 通过WCF WebSite访问Oralcle数据库,是不是通信协议有问题?


    跟通信协议没关系吧。

     


    Frank Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
     

    老徐的网站】:http://www.frankxulei.com/

    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2011年5月11日 12:50
    版主
  • 建议将Behavior中的配置改变一下IncludeExceptionDetailInFaults设置为true,这样可以知道具体的错误原因是什么。另在你的webconfig中怎么没看见数据库连接字符串呢?
    你随时可以开始!
    2011年5月11日 15:06
    版主
  • 单独测试没问题,但我还没有试过不用WCF包装,今天新建个Web工程测试一下, 现在用ODBC的方式访问Oracle数据库,连接暂时写死在代码里cn = new OdbcConnection("dsn=surdb;UID=suradmin;PWD=admin;"); 在WCF WebSite工程和WCF Service Library工程中调试都没有问题,但是在IIS6中新建一个虚拟目录,指向WCF WebSite工程,然后用命令行来运行“wcftestclient http://localhost/Surcharge/Service.svc”,界面可以打开,但是运行里面的一个服务,用来连接数据库,就会报错了,在IE地址栏数据http://localhost/Surcharge/Service.svc,也可以打开。 但是在WCF WebSite工程中右键Service.svc,然后选择View in Browser,会打开IE,从IE地址栏取得服务地址“http://localhost:1148/SurSite/Service.svc”,然后在命令行运行“wcftestclient http://localhost:1148/SurSite/Service.svc”,启动界面,调用服务都不会报错。 是不是跟IIS进程的安全性有关?
    2011年5月12日 1:34
  • 别自己瞎猜了,找问题的第一步就是找到出错的信息。

    在部署模式下,使用SvcConfigEditor.exe为服务增加诊断功能,然后使用SvcTraceViewer.exe查看错误信息。


    看你最后的描述,即有可能是权限问题,也就是用以启动你的Service的进程的用户没有读写I/O的权限。
    2011年5月12日 2:04