在Windows控制台应用程序中使用ax2012服务

时间:2013-05-17 06:37:51

标签: c# visual-studio-2010 visual-studio-2012 nettcpbinding dynamics-ax-2012

我有一台安装了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中添加安全模式=“无”,则会收到以下错误:“套接字连接已中止。这可能是由于处理消息时出错或远程主机超出接收超时造成的,或基础网络资源问题。本地套接字超时为'00:00:59.9609696'“

同样的事情在远程机器上完美运行但在我的机器上不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

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

  2. 转到AX-&gt; Inbound Port-&gt; Configure,更改服务绑定的安全性详细信息。 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. 现在应该有效。