Quantcast
Channel: Project Customization and Programming forum
Viewing all articles
Browse latest Browse all 5347

Project 2013 PSI wcf connection problem

$
0
0

Hi, I have web part published on project web access application (PWA) and connects to /_vti_bin/PSI/ProjectServer.svc through wcf service. Web part throws exception:

System.ServiceModel.Security.MessageSecurityException: The HTTP request is unauthorized with client authentication scheme 'Ntlm'.

The authentication header received from the server was 'NTLM'. ---> System.Net.WebException: The remote server returned an

error: (401) Unauthorized.

                                      |  Server stack trace:                                       |     in System.ServiceModel.Channels.HttpChannelUtilities.ValidateAuthentication(HttpWebRequest request, HttpWebResponse response, WebException responseException, HttpChannelFactory`1 factory)                                       |     in

System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory`1 factory, WebException responseException, ChannelBinding channelBinding)                                       |     in

System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)                                       |     in System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)                                       |     in System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)                                       |     in System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)                                       |     in System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

 Here is the code that creates binding point, it works fine when in console application (but throws exception above when in web part):

private static ProjectClient CreateProjectClient(string pwaUrl)
        {
            const int maxsize = 500000000;
            const string svcUrl = "/_vti_bin/PSI/ProjectServer.svc";

            BasicHttpBinding binding = pwaUrl.Contains("https:") ?
                new BasicHttpBinding(BasicHttpSecurityMode.Transport) :
                new BasicHttpBinding(BasicHttpSecurityMode.TransportCredentialOnly);

            binding.Name = "basicHttp_Project";
            binding.SendTimeout = TimeSpan.MaxValue;
            binding.MaxReceivedMessageSize = maxsize;
            binding.ReaderQuotas.MaxNameTableCharCount = maxsize;
            binding.MessageEncoding = WSMessageEncoding.Text;
            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
            binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Ntlm;
            binding.UseDefaultWebProxy = false;
            var address = new EndpointAddress(SPUrlUtility.CombineUrl(pwaUrl, svcUrl));
            var client = new ProjectClient(binding, address);
            if ((client.ChannelFactory != null) && (client.ChannelFactory.Credentials != null))
            {
                client.ChannelFactory.Credentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Impersonation;
                client.ChannelFactory.Credentials.Windows.AllowNtlm = true;
            }
            return client;
        }

It also works when I define credentials like

client.ClientCredentials.Windows.ClientCredential = new NetworkCredential("login", "password", "domain");

but I need to run under current user. I'm also check double hop problem and user permissions - no luck.

I hope somebody can help me, thanks.





Viewing all articles
Browse latest Browse all 5347

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>