4

我有一台安装了 AX2012 的远程机器,并且在其中我在 AX2012 中构建了一个自定义服务,并且我能够在 Windows 控制台应用程序 (VS2010) 中正确使用它。但是当我尝试通过 Windows 控制台应用程序 (VS2012) 从我自己的机器连接到服务时,它给了我错误“服务器已拒绝客户端凭据”。

我的代码如下:

 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 中添加 security mode = "none",则会收到以下错误“套接字连接已中止。这可能是由于处理您的消息时出错或远程主机超出接收超时,或底层网络资源问题。本地套接字超时为 '00:00:59.9609696'"

同样的事情在远程机器上完美运行,但在我的机器上不起作用。我该如何进行?

4

1 回答 1

1

一周后,我找到了解决方案。添加答案以帮助将来可能遇到此问题的其他人:

  1. 将服务的适配器从 Net.Tcp 更改为 HTTP

  2. 通过转到 AX->Inbound Port->Configure 更改服务绑定的安全详细信息。 在此处输入图像描述

  3. 在 IIS 中托管服务,如果您想从其他域使用它,则必须在 IIS 上托管服务。此链接解释了该过程http://technet.microsoft.com/en-us/library/gg731848.aspx

  4. 在 IIS 上仅启用 Windows 身份验证。 在此处输入图像描述

  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. 现在应该可以工作了。

于 2013-05-24T11:23:28.537 回答