2

我正在尝试编写一个简单地连接到 GP WebService 并调用它的 GetCustomerList() 方法来从大平原获取客户的程序。我在下面概述的代码是我在文档中找到的代码的重复,但是,当我运行它时,我得到了一个 SoapException。我不确定我是否缺少凭据(例如用户名和密码),或者我是否正确地调用了它。我相信我在 Dynamics Security Console 中正确设置了安全设置,但我不是 100% 确定或者是否还有其他需要配置的内容。任何帮助将不胜感激。

public IList<string> GetCustomerNames()
{
    //Added a ServiceReference to the actual WebService which appears to be working
    var service = new DynamicsGPClient();
    var context = new Context();
    var customerKey = new CustomerKey();
    var companyKey = new CompanyKey();

    //Trying to load the test data
    companyKey.Id = (-1);

    context.OrganizationKey = (OrganizationKey)companyKey;

    //Trying to load the test data
    customerKey.Id = "AARONFIT0001";

    var customers = service.GetCustomerList(new CustomerCriteria(), context);

    return customers.Select(x => x.Name).ToList();
}
4

1 回答 1

1

听起来像是一个安全问题...您是否收到特定的错误消息...这可能会有所帮助...

还发现了这个...

在我看来,您的网络服务上需要一个 Windows 应用程序池标识。现在您将 IIS 安全设置为“匿名”,因此客户端在调用您的方法时不需要传递凭据。

您需要将其关闭并将您的应用程序池作为 Windows 帐户运行。完成该工作后,您可以选择是否只想将该一个 App Pool 身份添加到 Web 服务的安全性中,并将所有操作作为该帐户完成(安全性差),或者在您的包装器中,您可以使用 HTTP 用户的上下文标识,并将其设置为您实际使用的 GP WebService 调用的“WorkOnBehalfOf”属性。

您必须在 Web 服务安全控制台中授予应用程序池身份“WorkOnBehalfOf”权限,然后授予您要调用 Web 服务的任何用户。这使安全模型保持不变,并且您授权调用包装的 Web 服务的用户实际上确实有权调用原始 GP Web 服务方法。(这是 Business Portal 将请求转发到 Web 服务的方式。)

https://groups.google.com/forum/?fromgroups=#!topic/microsoft.public.greatplains/W7gAo_zXit8

于 2013-01-26T13:02:35.600 回答