(Solved)[Reminder]
To someone who is experiencing the same problem:
If you received the same error message while you have got the clientaccesspolicy.xml and crossdomain.xml placed at the right folder, please check if you have accepted the self-signed certificate on the service side.
To accept a certificate: Enter the url of the service in the browser, and the browser will ask you if you want to trust it. There is also an option for installing the cert and no more warning about the certificate will be received from that site.
[Original Problem]
My silverlight application could not connect to a wcf service. Exception is thrown.
System.Reflection.TargetInvocationException: An exception occurred during the operation, making the result invalid. Check InnerException for exception details. ---> System.ServiceModel.CommunicationException: An error occurred while trying to make a request to URI 'http://fyp-pc13:97/HelloWorldService/HelloWorld.svc'. This could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, or a policy that is unsuitable for SOAP services. You may need to contact the owner of the service to publish a cross-domain policy file and to ensure it allows SOAP-related HTTP headers to be sent. This error may also be caused by using internal types in the web service proxy without using the InternalsVisibleToAttribute attribute. Please see the inner exception for more details. ---> System.Security.SecurityException ---> System.Security.SecurityException: Security error.
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClassa.<EndGetResponse>b__9(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)
--- End of inner exception stack trace ---
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
--- End of inner exception stack trace ---
at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
at SilverlightApplication1.ServiceReference1.HelloServiceClient.HelloServiceClientChannel.EndHello(IAsyncResult result)
at SilverlightApplication1.ServiceReference1.HelloServiceClient.SilverlightApplication1.ServiceReference1.IHelloService.EndHello(IAsyncResult result)
at SilverlightApplication1.ServiceReference1.HelloServiceClient.OnEndHello(IAsyncResult result)
at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)
--- End of inner exception stack trace ---
at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
at SilverlightApplication1.ServiceReference1.HelloCompletedEventArgs.get_Result()
at SilverlightApplication1.MainPage.ialert(Object sender, HelloCompletedEventArgs msg)
The service is working perfectly fine the console app. So I guess it’s the problem of my silverlight app config.
Web.config
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IHelloService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="WcfService1.HelloWorld">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHelloService" contract="WcfService1.IHelloService" name="BasicHttpBinding_IHelloService" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
ServiceReferences.ClientConfig:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IHelloService" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://fyp-pc13:97/HelloWorldService/HelloWorld.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IHelloService"
contract="ServiceReference1.IHelloService" name="BasicHttpBinding_IHelloService" />
</client>
</system.serviceModel>
</configuration>
Could anyone please help me with this issue? I have been sticking in the config file for days. Thanks a lot.
This might be due to security reasons in Silverlight, your exception text gives a clue in this direction: “[…]could be due to attempting to access a service in a cross-domain way without a proper cross-domain policy in place, […]“
If you are using IIS, this might be the
\inetpub\wwwroot\folder, but this may vary depending on your configuration.This is a plain text XML file containing the following lines (might be adjusted to your needs):
More info here: Making a Service Available Across Domain Boundaries
[EDIT]
If that does not work, also try putting a crossdomain.xml file to the webservice.
This contains the following lines: