WaterBoy
WaterBoy

Reputation: 709

Error accessing wcf service asynchronously in c# .net: unauthorised

I am building a standard odata client using: Microsoft.Data.Services.Client.Portable Windows 8 VS2013

I have added a service reference to the project (TMALiveData) with authorisation. Now I want to retrieve data but when I do I get the following error: DataServiceQueryException.InvalidOperationException

I looked at the DataServiceQueryResult object the status code is: System.Net.HttpStatusCode.Unauthorized

When I added the reference it asked me for my credentials, so I assumed this would be sent with each query, but it clearly isn't. How do I add the credentials (password and username) in the DataServiceQuery object? Below is my current code:

  public class testLSCon
  {
     static string mResult;

     public static string result { get { return mResult; } }

     public static void testREADLiveConnection()
     {
        Uri tmaLiveDataRoot = new Uri("https://xxx.azurewebsites.net/xxx.svc/");
        TMLiveData.TMALiveData mLiveData = new TMLiveData.TMALiveData(tmaLiveDataRoot);

        mResult = null;

        DataServiceQuery<TMLiveData.JobType> query = (DataServiceQuery<TMLiveData.JobType>)mLiveData.JobTypes.Where(c => c.IsActive == true);
        mResult = "Trying to READ the data";
        try
        {
            query.BeginExecute(OnQueryComplete, query);
        }
        catch (Exception ex)
        {
            mResult = "Error on beginExecute: " + ex.Message;
        }
     }

     private static void OnQueryComplete(IAsyncResult result)
     {
        DataServiceQuery<TMLiveData.JobType> query = (DataServiceQuery<TMLiveData.JobType>) result.AsyncState; 

        mResult = "Done!";
        try
        {
            foreach (TMLiveData.JobType jobType in query.EndExecute(result))
            {
                mResult += jobType.JobType1 + ",";
            }
        }
        catch (DataServiceClientException ex)
        {
            mResult = "Error looping for items: (DataServiceClientException)" + ex.Message;
        }
        catch (DataServiceQueryException ex2)
        {
            mResult = "Error looping for items: (DataServiceQueryException)" ;
        }
        catch (Exception ex3)
        {
            mResult = "Error looping for items: (general exception)" + ex3.Message;
        }
    }
}

Upvotes: 0

Views: 238

Answers (1)

ajg
ajg

Reputation: 1753

You can either set it to the credentials of the current user (so the credentials of the user the client is running as)

mLiveData.Credentials = CredentialCache.DefaultCredentials;

or if you need to impersonate another user you can use this (obviously swap the strings for the details you need - maybe passed in from config.

mLiveData.Credentials = new System.Net.NetworkCredential("UserName", "Password", "Domain");

Upvotes: 1

Related Questions