bkorzynski
bkorzynski

Reputation: 541

SOAP Exception when trying to Access GP WebServices

I am trying to write a program that simply connects up to a GP WebService and invokes it's GetCustomerList() method to get customers from Great Plains. The code I am outlining below is an duplication of what I was able to find in the documentation, however, when I run it I am getting a SoapException. I am not sure if I am missing credentials (eg. username and password) or if I am even invoking this properly. I believe that I have the Security settings set correctly in the Dynamics Security Console, but I am not 100% sure or if there is anything else I need to configure. Any help would be greatly appreciated.

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();
}

Upvotes: 2

Views: 841

Answers (1)

mattruma
mattruma

Reputation: 16677

Sounds like a security issue ... are you getting a specific error message ... that might be helpful ...

Also found this ...

It sounds to me like you need a Windows App Pool Identity on your webservice. Right now you have the IIS Security set to "anonymous", so the clients aren't required to pass the credentials when they call your methods.

You'll need to turn that off and run your app pool as a windows account. Once you've got that working, you can choose if you want to just add that one App Pool identity into the security for webservices, and have all the operations done as that account (poor security), or, in your wrapper, you could use the HTTP User's context identity, and set it to the "WorkOnBehalfOf" property for the GP WebService call you're actually using.

You'll have to give the App Pool identity "WorkOnBehalfOf" permission in the web service security console, and then whichever users you want to call the webservice. This keeps the security model intact, and you're authorizing that the users calling the wrapped webservice actually do have permission to call the original GP Webservice methods. (This is how Business Portal forwards requests to the webservices.)

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

Upvotes: 1

Related Questions