Navision(2009)Webservice是否支持对远程数据库的身份验证?

时间:2016-07-27 12:06:04

标签: web-services authentication windows-authentication navision

我目前正在尝试部署Navision网络服务(来自Dynamics Navision 2009),并且发现web服务在连接到本地Navision SQL数据库时进行身份验证,但 NOT 远程Navision SQL数据库

所以我们有服务器S(带有完整的Navision安装)和W(只安装了服务)。这两个系统上的CustomSettings.config文件是相同的,除了S引用localhost:

<add key="DatabaseServer" value="127.0.0.1"></add>
<add key="ClientCredentialType" value="Windows"></add>

W引用S:

<add key="DatabaseServer" value="S"></add>
<add key="ClientCredentialType" value="Windows"></add>

(省略其他详细信息。)在两种情况下,webservice本身都以相同的域用户身份运行,并且该用户在Navision中进行了身份验证。

当我连接到在S上运行的Web服务时,身份验证正常工作,服务正常进行:

http://S:7047/DynamicsNAV/WS/Company/Codeunit/RLIntegartion

我在这里省略了实际结果。当通过W连接时:

http://W:7047/DynamicsNAV/WS/Company/Codeunit/RLIntegartion

webservice将返回指示身份验证失败的XML:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <s:Fault>
      <faultcode xmlns:a="urn:microsoft-dynamics-schemas/error">
        a:Microsoft.Dynamics.Nav.Types.NavDatabasePasswordException
      </faultcode>
      <faultstring xml:lang="en-US">
        The login failed when connecting to SQL Server S.
      </faultstring>
      <detail>
        <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
          The login failed when connecting to SQL Server S.
        </string>
      </detail>
    </s:Fault>
  </s:Body>
</s:Envelope>

我可以将W上的ODBC连接配置到S上的Navision数据库,并且连接成功并进行正确的身份验证,因此实际的数据库连接和身份验证似乎没问题。

我知道通常必须在本地访问Web服务本身,以便可以从Navision Web服务编写的地方读取所写的任何文件,但是从文档中我可以看出,webservice可以合法地访问来自单独服务器的数据库。但是,在实践中(按上述方式),这似乎并没有实际发挥作用。

这是Navision施加的限制吗?如果没有,当同一个Web服务在本地成功时,是否有人建议在访问远程数据库时web服务无法进行身份验证?

或者它可能是codeunit程序员强加的限制吗?我已经和他们说过了,他们表示这应该有用,但很明显没有。

2 个答案:

答案 0 :(得分:1)

这是导航2009的已知问题。在以后的版本中,它没有额外的技巧。要解决此问题,您需要create SPN

我个人无法正确设置,所以我总是在SQL上使用SQL安装Web服务层。在这种情况下它有效。

答案 1 :(得分:1)

此方案中有三个参与者 - 数据库,Web服务和客户端(连接到此服务)。只有当所有这三个参与者都在三台不同的机器上时,才会出现问题。

只有满足以下要求时,此三机设置才有效: 1)您的客户端能够使用Kerberos身份验证(例如,Internet Explorer或.NET应用程序是否可用,但Chrome或PHP应用程序不能) 2)您设置NAV以使用Kerberos身份验证(而不是NTLM)并设置委派。

委派是一个允许NAV服务器(或Web服务)获取来自客户端的身份验证票证并将其传递给SQL Server的过程。您需要在Active Directory设置中明确允许此操作。为此你需要SPN--它们基本上描述了参与这个代表团的主题。

您可以参考这些手册来设置整个内容:

MSDN Walkthrough: Installing the Three Tiers on Three Computers

MSDN How to: Configure Web Services with Delegation

NAV 2009 Web Services on a three machine setup

您还可以恢复使用双机设置的更简单设置。在这种情况下,NAV服务器和SQL服务器应该在同一台机器上,或者NAV服务器和Web服务客户端应该在同一台机器上。作为后者的一个示例,您可以创建一个小型自定义Web服务,作为您的呼叫的代理,并将其发布到与NAV服务器/ Web服务相同的计算机上。