Проблема с использованием службы WF, размещенной в IIS с помощью клиента Silverlight

#c# #.net #visual-studio-2010 #workflow-foundation #iis-express

#c# #.net #visual-studio-2010 #рабочий процесс-основа #iis-express

Вопрос:

Я пытаюсь использовать службу WF, размещенную в IIS express (xamlx), из клиента Silverlight.

Я добавил ссылку на свою службу, и когда я использую клиентский прокси, я получаю это:

 System.ServiceModel.CommunicationException was unhandled by user code
  Message=An error occurred while trying to make a request to URI 'http://localhost:52878/Workflows/PerformanceAppraisal/Exempt.xamlx'. 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.EndCall(String action, Object[] outs, IAsyncResult result)
       at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
       at CompanyHR.ExemptPAService.ExemptPAClient.ExemptPAClientChannel.EndInitiatePerformanceAppraisal(IAsyncResult result)
       at CompanyHR.ExemptPAService.ExemptPAClient.CompanyHR.ExemptPAService.IExemptPA.EndInitiatePerformanceAppraisal(IAsyncResult result)
       at CompanyHR.ExemptPAService.ExemptPAClient.OnEndInitiatePerformanceAppraisal(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.<EndGetResponse>b__4(Object sendState)
                 at System.Net.Browser.AsyncHelper.<>c__DisplayClass4.<BeginOnUI>b__1(Object sendState)
            InnerException: 
  

Когда я добавлял ссылку на службу, я не использовалhttp://localhost:52878/Workflows/PerformanceAppraisal/Exempt.xamlx

Я использовал https-версию этого. Но, похоже, вместо этого используется этот URL.

Я использую IIS Express в Visual Studio 2010.

Комментарии:

1. Можете ли вы использовать какой-либо инструмент сетевого захвата (например, fiddler), чтобы узнать, что служба возвращает на вызов клиента? Сообщение об исключении из сетевых вызовов в SL обычно не дает много информации.

2. @carlosfigueira — Это довольно подробное исключение.

3. На самом деле это говорит о многом, но обычно недостаточно 🙂 По умолчанию приложения SL используют сетевой стек, предоставляемый браузером. Этот стек преобразует любые ответы об ошибках (т. Е. все, что имеет код состояния 4xx или 5xx) в 404, и это не позволяет платформе прочитать тело. Во многих случаях код состояния и тело ответа содержат полезную информацию для устранения проблемы, поэтому полезно использовать какой-либо инструмент сетевого захвата.

Ответ №1:

Сообщение об ошибке довольно ясно говорит о невозможности найтиclientaccesspolicy.xml . Это результат вызова службы на другом сайте, когда запущено приложение Silverlight. Вы не упомянули URL-адрес приложения Silverlight, но это может быть либо случай использования HTTPS, либо вообще другой сайт.

Комментарии:

1. Мне пришлось сделать URL службы относительным в файле whateveritscalled.config в моем проекте silverlight.