I was using basic Http binding and here are the changes that need to be made
<security mode="Transport">
<transport clientCredentialType="None" />
That now worked in the browser if I prefixed the url with https://
Next step was that I needed to call the web service where I was not able to access a web.config or an app.config. Without the service reference being available you have to do this in code. First thing is to make sure you have a copy of the interface class accessible in the client. It doesn't need to be the same name but it does need to specify the operation contract exactly.
[ServiceContract]
public interface IFormDefinition
{
[OperationContract]
[FaultContract(typeof(CRMSoapFault))]
void PublishFormMetaData(string crmEndPoint, string formId, string webResource, string token);
}
[DataContract]
public class CRMSoapFault
{
public CRMSoapFault(string errorMsg)
{
this.ErrorMsg = errorMsg;
}
///
/// This property is used to pass the custom error information
/// from service to client.
///
[DataMember]
public string ErrorMsg { get; set; }
}
To call the web service and set the binding information through code to match this you need to add:
BasicHttpBinding myBinding = new BasicHttpBinding();
myBinding.Security.Mode = BasicHttpSecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None;
EndpointAddress myEndpoint = new EndpointAddress(endPointUrl);
ChannelFactory
try
{
IFormDefinition wcfClient1 = myChannelFactory.CreateChannel();
// call the web service method
wcfClient1.PublishFormMetaData(crmEndPoint, formId, webResource, token);
}
catch(FaultException
{
}
No comments:
Post a Comment