Служба WCF и отладка Silverlight 3 - PullRequest
1 голос
/ 10 октября 2009

У меня есть служба WCF, которую я добавил в проект Silverlight и теперь размещаю в Visual Studio ASP.NET Dev Server. Но, пытаясь запустить его, я получаю следующую ошибку:

System.ServiceModel.CommunicationException was unhandled by user code
  Message="An error occurred while trying to make a request to URI 'http://localhost:51547/WCFService1/Service.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."
  StackTrace:
       at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
       at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult 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 niki_lanik_latestnews.WCFXmlOps.IxmlLoadClient.IxmlLoadClientChannel.EndLoadArticleFromXML(IAsyncResult result)
       at niki_lanik_latestnews.WCFXmlOps.IxmlLoadClient.niki_lanik_latestnews.WCFXmlOps.IxmlLoad.EndLoadArticleFromXML(IAsyncResult result)
       at niki_lanik_latestnews.WCFXmlOps.IxmlLoadClient.OnEndLoadArticleFromXML(IAsyncResult result)
       at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)
  InnerException: System.Security.SecurityException
       Message=""
       StackTrace:
            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)
       InnerException: System.Security.SecurityException
            Message="Security error."
            StackTrace:
                 at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
                 at System.Net.Browser.BrowserHttpWebRequest.c__DisplayClass5.b__4(Object sendState)
                 at System.Net.Browser.AsyncHelper.c__DisplayClass2.b__0(Object sendState)
            InnerException: 

Это не хост-кросс-домен, как в том же проекте, поэтому я не уверен, что это вызывает? Любые идеи кто-нибудь?

Tony

UPDATE

Ниже приведен мой обязательный конфиг в web.config:

        <bindings>
        <basicHttpBinding>
            <binding name="basicHTTP" 
             receiveTimeout="00:10:00" 
             sendTimeout="00:10:00" 
             closeTimeout="00:10:00" 
             openTimeout="00:03:00" 
             maxBufferSize="100000" 
             maxReceivedMessageSize="100000" 
             transferMode="StreamedResponse">

    </binding>
        </basicHttpBinding>
    </bindings>
    <services>
        <service behaviorConfiguration="mexBehavior" name="LoadXMLService.XMLOperations">
            <endpoint address="" 
              binding="basicHttpBinding" 
              bindingConfiguration="basicHTTP" 
              contract="LoadXMLService.IxmlLoad" />
        </service>
    </services>

Пожалуйста, помните, что этот сервис предназначен для загрузки и выгрузки файлов в проект Silerlight 3.

1 Ответ

2 голосов
/ 11 октября 2009

Я бы предложил добавить файл "clientaccesspolicy.xml" в корневой каталог вашего сайта со следующим содержимым (по крайней мере, в качестве шага устранения неполадок). Похоже, что полученная вами ошибка подсказывает, что это поможет.

Насколько я понимаю, Silverlight считает межпортовые вызовы междоменными (то есть localhost: 51547 и localhost: 4000 - разные домены).

<?xml version="1.0" encoding="utf-8"?>
<access-policy>
    <cross-domain-access>
        <policy>
            <allow-from http-request-headers="*">
                <domain uri="*"/>
            </allow-from>
            <grant-to>
                <resource path="/" include-subpaths="true"/>
            </grant-to>
        </policy>
    </cross-domain-access>
</access-policy>

[Изменить]

Ну, первое, что нужно сделать, чтобы это работало, это возможность напрямую подключиться к размещенному сервису, поэтому я выскажу некоторые идеи по поводу проблем, с которыми я столкнулся.

У вас есть эта линия в вашем сервисе?

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService
{
}

а эта строка в Web.Config?

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true">
</system.serviceModel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...