Silverlight 4 WCF Сервер не дал значимого ответа - PullRequest
1 голос
/ 27 января 2012

Я получаю пресловутую фразу «Сервер не предоставил значимого ответа; это может быть вызвано несоответствием контракта, преждевременным завершением сеанса или внутренней ошибкой сервера» в моем проекте. Это служба WCF PollingDuplex, используемая проектом Silverlight 4.

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

Вот XML Web Config сервера:

    <system.serviceModel>

    <extensions>
      <bindingExtensions>
        <add name="pollingDuplex" type="System.ServiceModel.Configuration.PollingDuplexHttpBindingCollectionElement,System.ServiceModel.PollingDuplex, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      </bindingExtensions>
    </extensions>


  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />

 <behaviors>
      <serviceBehaviors>
    <behavior name="PortalOnlineBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>

 <bindings>
 <pollingDuplex>
        <binding name="SLPollingDuplex" duplexMode="MultipleMessagesPerPoll" />
      </pollingDuplex>
    </bindings>

    <services>
      <service name="Online.Web.PortalOnline" behaviorConfiguration="PortalOnlineBehavior">
        <endpoint address="" binding="pollingDuplex" bindingConfiguration="SLPollingDuplex"
          contract="Notification.IPortalOnline" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://portalonline.com/PortalOnline/IPortalOnline" />
          </baseAddresses>
        </host>
      </service>
    </services>

  </system.serviceModel>

Вот объект, который я пытаюсь вернуть на SL через этот сервис WCF

Imports System.ServiceModel
Imports System.Runtime.Serialization
Imports DocCave.Common
Imports System.Xml
Imports System.IO

    <DataContract(NAMESPACE:=DataStore.NAMESPACE)>
    Public Class PortalDocument

        <DataMember()>
        Public Property DataSource As Byte()

        <DataMember()>
        Public Property FileName As String

        <DataMember()>
        Public Property FileType As String

    End Class

Вот метод WCF, который вызывается:

 Public Function GetDocument(sessionUserMeta As Common.UserMetaData, docId As System.Guid) As Notification.PortalDocument Implements Notification.IPortalOnline.GetDocument

        Dim doc As Documents.Document = Documents.Document.GetDocument(docId, sessionUserMeta)

        Dim portalDoc As New PortalDocument

        portalDoc.DataSource = doc.DataSource

        portalDoc.FileName = doc.QueryPackage.DocumentName
        portalDoc.FileType = doc.QueryPackage.Type

        Return portalDoc

    End Function

Дополнительная информация:

Это прекрасно работает для одного или двух запросов документов, и выдает мне вышеупомянутую ошибку. Например, я могу загрузить документ по умолчанию, когда приложение SL загружается с использованием этого метода с этим сервисом, и оно отлично заполняется. Затем я могу перейти к древовидному представлению, которое у меня есть, и выбрать документ, и он отлично работает для первого документа ... но после этого ошибка. Кроме того, я заметил, что иногда это будет работать только один раз, если я выберу определенные PDF-файлы, которые немного больше (250 КБ или около того ...) ... о, и я забыл ... вот код в моем приложении SL, который подключение к услуге WCF. Я использую «GetBaseWebAddress ()», потому что я использую динамические поддоменов, поэтому часть адреса может каждый раз отличаться ...

Private Sub LoadClient()


        Dim bind As New PollingDuplexHttpBinding(PollingDuplexMode.MultipleMessagesPerPoll)

        Dim endpoint As New EndpointAddress(GetBaseWebAddress() & "PortalOnline/PortalOnline.svc")

        Me.client = New PortalOnline.PortalOnlineClient(bind, endpoint)

        AddHandlers()

    End Sub

Я боролся с этим некоторое время, поэтому любая помощь будет принята с благодарностью ...

...