Служба WCF возвращает заголовок HTTP 200, а затем время ожидания, не возвращая никакого содержимого - PullRequest
1 голос
/ 23 июля 2010

У меня есть пользовательский элемент управления Silverlight 4, который вызывает службу WCF, находящуюся в веб-приложении ASP.NET 4.

Анонимный доступ к веб-сервису включен.Файл clientaccesspolicy.xml успешно загружен.При переходе к FieldITDbService.svc на сервере правильно отображаются метаданные службы.

Однако при попытке просмотреть тестовую страницу для элемента управления Silverlight, вызывающего эту службу WCF, сама служба возвращает:

HTTP/1.1 200 OK
Date: Thu, 22 Jul 2010 21:15:54 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
Content-Encoding: gzip
Content-Length: 4409
Cache-Control: private
Content-Type: application/soap+msbin1

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

Вот ссылка, показывающая, что происходит (из Fiddler2): http://imgur.com/VwgqS.png

Вот код в MainPage.xaml.cs, который вызывает веб-сервис:

var webService = new FieldITDbServiceClient();
webService.ReadVAMDataCompleted += webService_ReadVAMDataCompleted;
webService.ReadVAMDataAsync();
webService.CloseAsync();

Вот ClientConfig в проекте Silverlight, используемый для вызова веб-сервиса:

<system.serviceModel>
    <bindings>
        <customBinding>
            <binding name="CustomBinding_FieldITDbService">
                <binaryMessageEncoding />
                <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" />
            </binding>
        </customBinding>
    </bindings>
    <client>
        <endpoint address="http://[ipofmyserverhere]/FieldIT/FieldITDBService.svc"
            binding="customBinding" bindingConfiguration="CustomBinding_FieldITDbService"
            contract="DbServiceRef.FieldITDbService" name="CustomBinding_FieldITDbService" />
    </client>
</system.serviceModel>

Воткод в реальной службе WCF, FieldITDbService.svc:

 [ServiceContract( Namespace = "" )]
    [AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Required )]
    public class FieldITDbService
    {
        [OperationContract]
        public List<VAM> ReadVAMData()
        {
            List<VAM> allData = new List<VAM>();
            using( FieldITEntities dbContext = new FieldITEntities() )
            {
                allData.AddRange( dbContext.VAMs.ToList() );
            }
            return allData;
        }
    }

Вот раздел serviceModel в файле web.config веб-приложений:

 <system.serviceModel>
    <diagnostics>
      <messageLogging maxMessagesToLog="100"
          logEntireMessage="true"
          logMessagesAtServiceLevel="true"
          logMalformedMessages="true"
          logMessagesAtTransportLevel="true">
      </messageLogging>
    </diagnostics>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <customBinding>
        <binding name="FieldIT.FieldITDbService.customBinding0">
          <binaryMessageEncoding />
          <httpTransport />
        </binding>
      </customBinding>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <services>
      <service name="FieldIT.FieldITDbService">
        <endpoint address="" binding="customBinding" bindingConfiguration="FieldIT.FieldITDbService.customBinding0"
          contract="FieldIT.FieldITDbService" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

1 Ответ

2 голосов
/ 26 июля 2010

Переключение на обработку HTTP клиента, поставив строку

 WebRequest.RegisterPrefix( "http://", WebRequestCreator.ClientHttp );

в конструкторе MainPage () исправил эту проблему мгновенно и для всех браузеров. Я понятия не имею, почему или как, но я просто собираюсь принять это и двигаться дальше.

http://msdn.microsoft.com/en-us/library/dd920295%28v=VS.95%29.aspx

...