你不得不原諒我,雖然我知道關於NAV網絡服務的一些東西,但我幾乎不知道Sharepoint和BCS。
但是,話雖如此,我確實有幾條建議可能會有所幫助:首先,NAV Web服務基於WCF構建,並使用BasicHttpBinding。如果您對如何將WCF BasicHttpBinding服務連接到BCS做了一些研究,那麼您可能會在此獲得一些牽引力。任何標準的BasicHttpBinding服務和NAV特定的Web服務之間沒有根本的區別。
您還提到您可以使用Web引用成功連接到Visual Studio中的NAV Web服務。但是,Web引用代理是使用舊的「wsdl.exe」實用程序構建的,因此只能與傳統的SOAP Web服務一起使用。雖然BasicHttpBinding服務完全向後兼容SOAP Web服務,但仍然存在缺少任何WCF服務特有的配置設置的問題。您真的可能想考慮在Visual Studio中使用服務引用,並弄清楚如何使其與已發佈的NAV Web服務正常工作。通過這種方式,您可以使用生成的配置設置來希望瞭解Sharepoint設計人員缺少的內容。我的猜測是缺少的「端點配置」錯誤告訴你,在使用WCF代理連接到NAV Web服務之前,必須在Sharepoint設計器中使用一些WCF特定的設置。例如,它可能在安全性方面,因爲WCF比傳統的SOAP提供了更精細的控制級別。同樣,我認爲的關鍵是記住,共享點需要一個正確配置的WCF端點,而舊的Web引用則不需要。這可能就是爲什麼你可以讓它在Visual Studio中工作而不是在Sharepoint設計器中工作的原因。
只給你一個想法(沒有「最佳實踐」一課),當我在NAV項目創建服務引用代理我經常嘗試去與基於代碼的配置,而不是基於文件的過於冗長配置(特別是因爲我們無法控制NAV服務層端點綁定)。我使用類似於此的代碼來創建客戶端連接(當然,這只是僞代碼,並且不會編譯,您需要指向實際的服務引用客戶端代理類,但這應該會給您一個想法哪些WCF綁定配置參數是必要的):
using System.Security.Principal;
using System.ServiceModel;
private void TestNavConnection(string url)
{
using (var ws = new NavServiceReference(GetBindingTransportCredentialOnly(), new EndpointAddress(url)))
{
ws.ClientCredentials.Windows.AllowNtlm = true;
ws.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
var record = ws.Read("XYZ");
}
}
private static BasicHttpBinding GetBindingTransportCredentialOnly()
{
var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
binding.MaxReceivedMessageSize = 1048576;
return binding;
}
希望這會有所幫助。祝你好運!