On my local development machine, I have a WinForms app that connects to the WCF based DataPortal and everything works fine.
When I publish the DataPortal to the server and change my connection in my WinForm app to use the remote data portal, it throws the following exceptions:
"The caller was not authenicated by the service."
"The request for the security token could not be satisifed because authenication failed."
When I browse to http:://www.mycompany.com/DataPortal.svc, I get the proper information and can display the WSDL information, too.
My web.config has this in it:
<system.serviceModel>
<services>
<service name="Csla.Server.Hosts.WcfPortal" behaviorConfiguration="returnFaults">
<endpoint
contract="Csla.Server.Hosts.IWcfPortal"
binding="wsHttpBinding"
bindingConfiguration="wsHttpBinding_IWcfPortal"/>
</service>
</services>
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding_IWcfPortal" maxReceivedMessageSize="2147483647">
<readerQuotas
maxBytesPerRead="2147483647"
maxArrayLength="2147483647"
maxStringContentLength="2147483647"
maxNameTableCharCount="2147483647"
maxDepth="2147483647"/>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="returnFaults">
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
And my app.config contains the usual CSLA settings:
<add key="CslaPropertyChangedMode" value="Windows"/>
<add key="CslaDataPortalProxy" value="Csla.DataPortalClient.WcfProxy, Csla"/>
<add key="CslaDataPortalUrl" value="http://www.mycompany.com/DataPortal.svc"/>
<add key="CslaAuthentication" value="Csla"/>
Any guidance for how I can use my data portal once it's published to the server?
From the exception message there is a mismatch in authentication.
Is your server configured to use Windows Authentication?
If so try to activate Anonymous Authentication on your server and check if the portal works as expected.
If you want to use WIndows Authentication you must also configure WCF to use that authentication type on both server and client.
I have just confirmed in IIS that the Authentication is has Anonymous Authentication enabled and all other forms are disabled.
Do you have
<add key="CslaAuthentication" value="Csla"/>
in your web.config?
Do you have
<add key="CslaAuthentication" value="Csla"/>
in your web.config?
Yes, I have that in there. It is in my web.config and also my app.config.
Well, then it's likely hardcore transport debugging to be done.
You should use FIDDLER or a network trace tool to inspect the communication and try to detect why/where there is mismatch in the authentication.
I should say at this point that I'm trying to host in Azure.
This is what I've done (among a million other things, but these are the most salient):
I've created a plain WCF service and confirmed that I can host it in Azure.
Rocky has an AzureHost example project that is associated with the DataPortal book. It runs a Silverlight application and I've confirmed that it runs in Azure.
Then, I added a Windows Form project to the AzureHost project and set the CslaDataPortalUrl element in the WinForm App.Config to the local AzureHost instance and it actually runs.
But, once I publish the data portal to Azure, change my CslaDataPortalUrl to the Azure address for the .svc file, I get the exception "The request for security token could not be satisfied because authentication failed."
Azure defaults to anonymous authentication so I'm not sure what else I need to be looking at. Is Azure really that different that IIS, even though they love to say it is not?
After trying ever machination I could find with getting an Azure WCF-based CSLA data portal to work with a WinForms application, I'm finally to the point where I don't think it's possible. I'm able to get a standard WCF service to work in Azure, but getting CSLA to work has been fruitless no matter how many settings I fiddle with in the config files.
The CSLA examples are for Silverlight programs and they work in Azure, and I've even tried to take the AzureHost project and modify it to have a WinForms app access the library, but that has failed. In fact, I've created a test GitHub project to make it easy for somebody to point out how to hook up WinForms to Azure:
https://github.com/BradRem/AzureHostTest
I also have a StackOverflow question with a nice bounty running and nobody has submitted a solution:
http://stackoverflow.com/questions/17557700/how-do-i-configure-a-csla-wcf-dataportal-for-azure
I'm beyond baffled.
When you say "in Azure" do you mean in a web site or a cloud service?
I have numerous data portal end points running in cloud services (web role). I don't know that I've tried hosting one in an azure web site, so there could be unforeseen issues there I suppose.
Azure, cloud services with a web role. You have a project called AzureHost that goes along with the DataPortal book. I essentially took that project, removed the Silverlight stuff and tried to make it work with WinForms app because I wasn't able to get my actual project working. I've tried certifcates and different wsHttpSettings and practically everything under the sun, but keeping running into one exception after another.
I direct you to my StackOverflow question for my complete write up:
http://stackoverflow.com/questions/17557700/how-do-i-configure-a-csla-wcf-dataportal-for-azure
And my bare-bones test project on GitHub to illustrate my struggles:
https://github.com/BradRem/AzureHostTest
I'm feeling at the end of my rope.
Copyright (c) Marimer LLC