2015-09-20 8 views
1

Я пытаюсь перенести какой-то существующий код расширения WCF в приложение Xamarin, предназначенное для iOS, WinPhone и Android. Код в настоящее время работает в приложении для настольных компьютеров без каких-либо проблем.Xamarin WCF IClientMessageInspector/Пользовательские заголовки

По сути, весь код выполняет ловушку каждого исходящего вызова службы WCF и добавляет некоторые заголовки http, затем улавливает ответ и считывает любые возвращенные заголовки. Это достигается с помощью пользовательского поведения и IClientMessageInspector в коде и настроить в app.config в моем существующих окнах настольного приложения:

<behaviors> 
    <endpointBehaviors> 
     <behavior> 
     <MyBehavior ConsumerKey="878846DF-2E7B-4165-8542-9F68583DD7D4" ConsumerType="Windows Forms" /> 
     </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <extensions> 
    <behaviorExtensions> 
     <add name="MyBehavior" type="MyBehavior.Objects.ServiceLayer.WCFExtensions.ConsumerBehaviorElement, MyBehavior.Objects.ForConsumers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> 
    </behaviorExtensions> 
    </extensions> 

К сожалению, я, кажется, не имеет app.config в моем проекте Xamarin так начал смотреть на ручное добавление поведения через код. Я видел много примеров, показывающих использование:

myServiceClient.Enpoint.Behaviors.Add (...)

Однако, я, кажется, не имеют доступа к свойству Поведения моей Endpoint (System.ServiceMode .Description.ServiceEndpoint) из App.cs в моем приложении Xamarin. У меня есть доступ только к адресу, привязке, контракту и имени.

Может ли кто-нибудь указать мне в правильном направлении. Как уже упоминалось выше, все, что я хочу сделать, это присоединить некоторые заголовки к каждому вызову службы WCF и прочитать некоторые заголовки ответа.

Некоторые больше информации:

Пример вызова моей службы WCF следующим образом:

private void CallService() 
    { 

     MyAuthenticationService.AuthenticationServiceClient _ws = new MyAuthenticationService.AuthenticationServiceClient(); 

     _ws.AuthenticateCompleted += _ws_AuthenticateCompleted; 
     _ws.AuthenticateAsync(new MyAuthenticationService.AuthenticationRequest1()); 


    } 

    private void _ws_AuthenticateCompleted(object sender, MyAuthenticationService.AuthenticateCompletedEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 

И, наконец, мой проект Xamarin ориентирован:

  • .Net Framework 4.5
  • Windows 8
  • Windows Phone Silverlight 8
  • Xamarin.Android
  • Xamarin.iOs
  • Xamarin.iOS (Classic)

Благодаря Дэвид

+0

Я прочитал эту статью. Эта статья очень хорошая. Но он объясняет, как добавить пользовательский заголовок в запрос WCF. Но вы упомянули в вопросе, что вам также нужно «поймать ответ и прочитать все заголовки, которые были возвращены». Итак, я хочу знать, как вы можете это достичь? –

ответ

0

Получил ответ на форуме Xamarin, который сделал именно то, что мне нужно.

http://forums.xamarin.com/discussion/comment/153751#Comment_153751

http://blogs.msdn.com/b/wsdevsol/archive/2014/02/07/adding-custom-messageheader-and-http-header-to-a-wcf-method-call.aspx

+0

Я прочитал эту статью. Эта статья очень хорошая. Но он объясняет, как добавить пользовательский заголовок в запрос WCF. Но вы упомянули в вопросе, что вам также нужно «поймать ответ и прочитать все заголовки, которые были возвращены». Итак, я хочу знать, как вы можете это достичь? –

Смежные вопросы