0

我目前正試圖部署Navision webservice(來自Dynamics Navision 2009),並發現當連接到本地Navision SQL數據庫時,webservice進行身份驗證,但是不是遠程Navision SQL數據庫。Navision(2009)Webservice是否支持對遠程數據庫進行身份驗證?

因此,我們有服務器S(具有完整的Navision安裝)和W(僅安裝了服務)。在這兩個系統中的文件CustomSettings.config是除了相同,其中S引用本地主機:

<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> 

本身運行作爲相同的web服務域用戶,並且該用戶在Navision中進行身份驗證。

當我連接到這是對S,認證工作和服務進行運行正常的web服務:

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

我會在這裏省略實際結果。當基於W而不是連接:

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

的Web服務,而不是返回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至S上的Navision數據庫的ODBC連接,連接成功並驗證正確,所以實際的數據庫連接和身份驗證似乎沒有問題。

我知道,web服務本身通常必須在本地訪問,以便任何寫入的文件都可以從Navision Web服務寫入的地方讀取,但從文檔中可以看出,web服務可以合法訪問數據庫從一個單獨的服務器。然而,在實踐中(根據上述),這似乎並不實際。

這是Navision強加的限制嗎?如果沒有,有沒有人有任何建議,爲什麼web服務在訪問遠程數據庫時無法進行身份驗證,當相同的web服務本地成功?

或者它可能是codeunit程序員施加的限制嗎?我已經跟他們說過了,他們表示這應該起作用,但顯然它沒有。

回答

1

這是Nav 2009的已知問題。在後來的版本中,它沒有額外的技巧。要解決這個問題,你需要create SPN

我個人無法正確設置它,所以我總是使用SQL在同一臺服務器上安裝Web服務層。在這種情況下,它的作品。

+0

MakSim是正確的,你需要一些SPN:https://social.technet.microsoft.com/wiki/contents/articles/717.service-principal-names-spns-setspn-syntax-setspn-exe.aspx – azatoth

+0

我根據Technet文章配置了SPN,但仍收到驗證錯誤。 我想我只需要在SQL服務器上運行IIS。 (對於Web服務本身不是必需的,但對使用它的Web服務是必需的。)我們只需鎖定對IIS的訪問,以限制除需要訪問的服務器以外的主機訪問。 無論如何,謝謝你的建議。 – Ronny

1

這個方案有三個參與者 - DB,Web服務和客戶端(連接到這個服務)。只有當這三個參與者都在三臺不同的機器上時,問題纔會出現。

只有滿足以下要求,此三機設置才能工作: 1)您的客戶端能夠使用Kerberos身份驗證(例如Internet Explorer或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服務相同的機器上。

相關問題