4

我有一臺安裝了AX2012的遠程計算機,並在其中構建了AX2012中的自定義服務,我可以在Windows控制檯應用程序(VS2010)中正確使用它。但是,當我嘗試通過Windows控制檯應用程序(VS2012)從我自己的機器連接到服務時,它給我提供了錯誤「服務器拒絕了客戶端憑據。」在Windows控制檯應用程序中使用ax2012服務

我的代碼如下:

ServiceReference1.TestService1Client t = new ServiceReference1.TestService1Client(); 
     t.ClientCredentials.UserName.UserName = "vanya"; 
     t.ClientCredentials.UserName.Password = "*******"; 
     t.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation; 
     ServiceReference1.CallContext c = new ServiceReference1.CallContext(); 
     c.Company = "ussi"; 
     ServiceReference1.EventList eventss = t.getEventItems(c, "BradPSUS", "contoso.com"); 

的在我的app.config結合如下:

<bindings> 
     <netTcpBinding> 
      <binding name="NetTcpBinding_TestService1" transferMode="Buffered" /> 

      <binding name="NetTcpBinding_ItemService" /> 
     </netTcpBinding> 
    </bindings> 

如果我在我的app.config添加安全模式= 「無」出現以下錯誤:「套接字連接中止,這可能是由於處理您的消息時出錯或遠程主機超出接收超時或基礎網絡資源問題導致的。本地套接字超時爲'00:00:59.9609696' 「

這同樣的東西在遠程機器上完美工作,但在我的機器上無法正常工作。我如何繼續?

+0

遠程機器是否在內部網絡上運行?這個網絡和本地機器一樣嗎?我沒有AX 2012的經驗,但考慮到將安全模式設置爲無時出現的錯誤消息,以及遠程工作的事實,它可能是不匹配的子網。 –

+0

遠程機器位於不同的域上。 – Vanya

回答

1

一週後,我找到了解決方案。添加答案去幫助別人誰可能在未來面臨這樣的問題:

  1. 變化從的net.tcp服務的適配器HTTP服務的綁定的

  2. 更改安全細節轉到AX->入站端口 - >配置。 enter image description here

  3. 在IIS中託管服務,如果要從其他域使用它,則必須在IIS上託管服務。此鏈接解釋過程http://technet.microsoft.com/en-us/library/gg731848.aspx

  4. 只在IIS上啓用Windows身份驗證。 enter image description here

  5. 在安裝了AX的計算機上的Visual Studio中創建控制檯應用程序。添加對服務的引用。你的app.config應該是這樣的:

    <?xml version="1.0" encoding="utf-8" ?> 
        <configuration> 
        <system.serviceModel>  
         <bindings> 
         <basicHttpBinding> 
         <binding name="BasicHttpBinding_Service1" allowCookies="true" 
         maxBufferPoolSize="20000000" maxBufferSize="20000000" maxReceivedMessageSize="20000000"> 
    
        <readerQuotas maxDepth="32" maxStringContentLength="200000000" 
         maxArrayLength="200000000" /> 
        <security mode="TransportCredentialOnly"> 
         <transport clientCredentialType="Windows" /> 
        </security> 
        </binding> 
    </basicHttpBinding> 
        </bindings> 
          <client>   
         <endpoint address="http://******/MicrosoftDynamicsAXAif60/Test3/xppservice.svc" 
         binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Service1" 
         contract="ServiceReference1.Service1" name="BasicHttpBinding_Service1" >   
        </endpoint> 
    </client> 
        </system.serviceModel> 
        </configuration> 
    
  6. 把這個控制檯應用程序的DLL和將其粘貼到其他機器(在一個不是在同一個域)

  7. 創建控制檯應用程序和添加對此dll的引用。使用此dll訪問該服務。

  8. 粘貼相同的app.config內容。

  9. 添加這三行的.cs文件

    workListSvc.ClientCredentials.Windows.ClientCredential.Domain = "*****"; 
        workListSvc.ClientCredentials.Windows.ClientCredential.UserName = "kevin"; 
        workListSvc.ClientCredentials.Windows.ClientCredential.Password = "*****"; 
    
  10. 現在應該工作。

相關問題