Странная проблема веб-службы IIS / WCF - PullRequest
0 голосов
/ 30 ноября 2018

Windows Server 2012 - IIS 8.x

У меня развернута веб-служба WCF (DLL) в IIS, которая поддерживает SOAP и REST через https.Для Comodo установлен сертификат для SSL.

Когда я создаю прокси для службы в приложениях C #, все работает нормально.Кроме того, когда я вызываю большинство методов REST из браузера или из Postman, они также работают нормально.

Но есть несколько методов REST, которые не срабатывают без исключения.В браузере Chrome я получаю сообщение об ошибке: «Этот сайт недоступен».В Почтальоне я получаю сообщение об ошибке: «Не удалось получить ответ».

Когда я проверяю код в службе WCF, я вижу, что метод вызывается и фактически выполняется без исключения, но ничего не происходит.вернулся.Я также проверил журналы IIS и не вижу никаких ошибок.

Вот пример метода, который работает нормально:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/GetActivityRules?agencyID={agencyID}")]
List<ActivityRule> GetActivityRules(int agencyID);

Тем не менее, этот метод не работает:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "/GetActivity?agencyID={agencyID}&userID={userID}&date={date}&view={view}")]
List<Activity> GetActivity(int agencyID, int userID, string date, string view);

Кто-нибудь сталкивался с этим раньше или есть какие-либо идеи, почему это происходит или как лучше всего устранить неполадки?

ОБНОВЛЕНИЕ # 1

Я добавил код в функцию GetActivity , которая записывает в файл журнала каждый раз, когда он вызывается.Я вижу, что функция выполняется правильно без ошибок каждый раз, но все равно нет ответа.Заставляет меня задуматься, не связана ли проблема с WCF.Я также добавил прослушиватель трассировки в веб-конфигурацию, но файл так и не был создан.

<system.diagnostics>
      <sources>  
            <source name="System.ServiceModel"   
                    switchValue="Information, ActivityTracing"  
                    propagateActivity="true">  
            <listeners>  
               <add name="traceListener"   
                   type="System.Diagnostics.XmlWriterTraceListener"   
                   initializeData= "C:\Samadhi\TraceLog.svclog" />  
            </listeners>  
         </source>  
      </sources>  
   </system.diagnostics>

ОБНОВЛЕНИЕ # 2

Я потратил неделю на поиски оцепенения,читать и проверять все, что мог, без результата.Я поднял проблему поддержки с Microsoft, которая была передана одному из их старших инженеров.Они провели два дня, изучая проблему, но до сих пор не нашли решения.Они говорят мне, что никогда не видели этого раньше!

Ответы [ 3 ]

0 голосов
/ 03 декабря 2018

, чтобы включить трассировку wcf, вы должны создать исходную конфигурацию для System.ServiceModel.Это должно отследить сериализацию сервиса:

<system.diagnostics>
<sources>
  <source name="System.ServiceModel" switchValue="Verbose" propagateActivity="true">
    <listeners>
      <add name="svc" />
    </listeners>
  </source>
</sources>

<sharedListeners>
  <add name="svc" type="System.Diagnostics.XmlWriterTraceListener" traceOutputOptions="DateTime" initializeData="c:\trace.svclog" />
</sharedListeners>

<trace autoflush="true" indentsize="4">
  <listeners>
    <add name="svc" />
    <remove name="Default" />
  </listeners>
</trace>
<system.diagnostics>
0 голосов
/ 15 декабря 2018

Как разочарование в разработке программного обеспечения.Клянусь, мне скоро понадобится заместительная терапия.Я наконец-то нашел причину проблемы, и, как это чаще всего бывает, все сводится к моей программной ошибке.Расстраивающая часть - это когда у вас нет сообщения об ошибке, или когда фреймворк генерирует общую ошибку, которая не дает подсказки о том, что не так.

Проблема сводилась к тому, что WCF не смог вернуть результат JSON- невозможно проанализировать список объектов в JSON.Это произошло из-за того, что значение неинициализированной даты было вне допустимых минимальных и максимальных значений.Конечным результатом было отсутствие ответа от сервера, даже код ошибки.При вызове того же метода с использованием SOAP XML анализировался нормально - только вызов REST не удался.

У меня изначально были проблемы с настройкой трассировки WCF.По какой-то причине служба перестала работать.И поскольку это был производственный сервер, у меня были только ограниченные временные рамки для работы при внесении изменений в конфигурацию.Наконец, увидев сообщение об ошибке JSON, я понял, что нужно сделать, чтобы устранить проблему.

0 голосов
/ 30 ноября 2018

Я пытался использовать ваш код и тестировать его локально, и, похоже, все работало нормально.Даже если метод 2 содержит несколько параметров, WCF может их получить.Я думаю, что проблема в другом.Например, если объем передачи данных слишком велик, попробуйте настроить следующий код в привязке.

<binding name="mybinding" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" sendTimeout="00:10:00" receiveTimeout="00:10:00">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" />

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...