Вызов WCF не отображается в Fiddler2 - PullRequest
10 голосов
/ 23 мая 2011

У меня есть простой сервис WCF с привязкой basicHttp. Служба размещается локально (ноутбук Win7) в IIS7. Я могу просмотреть сервис по адресу: http://localhost/musicstore/musicstore.svc (порт 80)

Я разработал простое клиентское приложение Windows Form для вызова службы. Это работает нормально, но я бы очень хотел увидеть сообщение вызова / ответа через Fiddler2. Fiddler2 с радостью сообщит о трафике, когда я буду просматривать веб-страницы, поэтому не могу понять, почему он не отвечает на этот вызов WCF?

Есть ли другой способ просмотра данных о вызовах WCF. Может быть, есть инструмент Microsoft?

Конфигурация клиента:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>

    <client>
      <endpoint address="http://localhost/musicstore/musicstore.svc"
        binding="basicHttpBinding" bindingConfiguration="" contract="MusicStore.IMusicStore"
        name="BasicHttp" />
    </client>
  </system.serviceModel>
</configuration>

Сервисный конфиг:

<services>
   <service behaviorConfiguration="MusicStoreBehavior" name="MusicStore">
    <endpoint address="" binding="basicHttpBinding" contract="IMusicStore">
     <identity>
      <dns value="localhost" />
     </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
   </service>
  </services>

Ответы [ 4 ]

15 голосов
/ 23 мая 2011

Самый простой способ увидеть, что делает WCF, - включить собственную регистрацию в WCF. Вы можете сделать это, отредактировав ваш web.config и добавив

<system.diagnostics>
  <sources>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
                 <add name="messages"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\logs\messages.svclog" />
          </listeners>
      </source>
    </sources>
</system.diagnostics>

<system.serviceModel>
  <diagnostics>
    <messageLogging 
         logEntireMessage="true" 
         logMalformedMessages="false"
         logMessagesAtServiceLevel="true" 
         logMessagesAtTransportLevel="false"
         maxMessagesToLog="3000"
         maxSizeOfMessageToLog="2000"/>
  </diagnostics>
</system.serviceModel>

MSDN содержит более подробную информацию о том, что вы можете настроить. Вы можете просмотреть журналы в Средстве просмотра трассировки .

8 голосов
/ 13 июня 2013

Есть много дубликатов этого вопроса, многие из которых имеют правильные ответы.Вы должны использовать http://localhost.fiddler/ в качестве цели, и .NET правильно проксирует запрос.Fiddler затем изменит "localhost.fiddler" на "localhost" перед передачей запроса.

3 голосов
/ 23 мая 2011

Вы можете изменить файл конфигурации вашего клиента:

<configuration>
  <system.net>
    <defaultProxy>
      <proxy bypassonlocal="false" usesystemdefault="true" />
    </defaultProxy>
  </system.net>
</configuration>

Или вы можете использовать:

GlobalProxySelection.Select = new WebProxy("127.0.0.1", 8888);

От: Сайт Fiddler

0 голосов
/ 16 января 2013

У меня была такая же проблема, и я исправил ее так:

  1. Разместите свой сервис в IIS express
  2. Добавьте привязку к вашему внешнему IP-адресу локальной сети, используя applicationhost.config IISExpress в Documents / IISExpress / config
  3. Используйте настройку прокси для голландского nico (см. Ниже)

  4. Убедитесь, что ваше клиентское приложение использует ваш «внешний» ip. Итак, 192.168.1.X вместо localhost.

  5. Возможно, вам придется изменить конфигурацию WCF, чтобы разрешить множественные привязки для asp.net 4.0

    <serviceHostingEnvironment multiplesitebindingsenabled="true"/>
    
...