来自远程Web应用程序的WCF调用

时间:2014-02-20 08:19:36

标签: database wcf

我是WCF的新手。我在一个网站上运行了WCF服务(VacationSickPayoutService)。如果我只是声明,分配和返回一个字符串,我可以从远程网站调用WCF服务获取字符串 - 没问题。但是,如果在那个WCF服务例程中,我尝试进行数据库调用然后返回一个字符串值,它就完全失败了。我确定我需要远程调用者进行某种身份验证才能让服务调用数据库?我只是使用与物理Web用户(人类)相同的数据库登录/调用,如果他们在站点上并且进行了数据库调用。即该服务使用相同的功能。

我可以对服务机器上的web.config文件进行一些更改,以允许远程调用在服务例程中启动数据库调用吗?这是我在web.config中对WCF服务的唯一引用:

 <system.serviceModel>
      <behaviors>
        <serviceBehaviors>
          <behavior name="">
            <serviceMetadata httpGetEnabled="true" />
            <serviceDebug includeExceptionDetailInFaults="false" />
          </behavior>
        </serviceBehaviors>
      </behaviors>
      <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    </system.serviceModel>
    <entityFramework>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="v11.0" />
        </parameters>
      </defaultConnectionFactory>
    </entityFramework>

我是否需要在web.config文件中引用实际的WCF服务(VacationSickPayoutService),或者这更复杂?

另外,忘了提到为了使用服务我在远程Web应用程序中添加了服务引用,所以我可以看到返回字符串的函数调用。

提前致谢!!!!

1 个答案:

答案 0 :(得分:0)

对数据库进行身份验证

从WCF服务调用数据库时,您有三种选项可供使用。您应该使用哪一个取决于您的服务部署位置。

  1. SQL帐户(即数据库连接字符串中的用户名+密码)
  2. 使用运行WCF服务的帐户进行集成身份验证(例如,域中的服务帐户)
  3. 使用模拟进行集成身份验证(即,对数据库的调用看起来好像服务实际上是调用服务的远程用户)
  4. 选项3仅适用于具有域的Intranet,因为用户,服务和DB都必须知道域。选项2更常见,因为它更容易设置,通常可以为您提供相同的安全性优势。只有当您的服务和数据库都没有可用的域时,才建议使用选项1.

    假设您使用选项2,则需要为您的服务创建域帐户。然后,无论您托管哪个服务,都需要使用该帐户。通常,WCF服务托管在IIS中,或者有时托管在自托管命令行应用程序中。如果您使用的是IIS,则需要将AppPool的标识设置为您为该服务创建的域帐户。最后,您需要为您的域帐户提供数据库中的必要访问权限(例如,在SQL Server中,您需要为该帐户创建服务器和数据库登录,然后授予其表读访问权限等)。

    排除WCF服务中的内部错误

    当我开始使用WCF时,我正在对错误进行大量盲目调试,写入日志文件等。然后我找到了这个工具:Service Trace Viewer Tool (MSDN)。这是分析WCF服务出错的最佳方式;它将捕获发生的所有,并让您搜索例如您的数据访问代码所引发的异常。

    您可能还希望在调试时设置includeExceptionDetailInFaults = true,因为这会(通常)将详细的内部异常传递给您的客户端,以便您可以通过这种方式获得一些反馈。 (比启动服务跟踪查看器工具更容易。:))

    下运行的服务是什么帐户

    您可以修改字符串返回服务方法,以返回字符串值Thread.CurrentPrincipal.Identity.Name,以查看运行该服务的帐户。 (MSDN documentation