WCF - NullReferenceException для самого простого вызова WCF - PullRequest
1 голос
/ 05 июня 2009

Я создал свой первый проект Silverlight в VS 2008 Express и пытаюсь вызвать с ним веб-сервис WCF. Веб-сервис очень прост - я просто взял код по умолчанию, созданный при использовании шаблона службы WCF из VisualStudio, переименовал все, чтобы оно не было именем по умолчанию «Service1», и даже удалил сложный тип возвращаемого значения, чтобы единственный метод В контракте есть метод, который возвращает строку.

Со стороны Silverlight я создал новый проект из шаблона Silverlight, выбрав опцию, чтобы также создать содержащий веб-проект ASP.NET. Я оставил веб-проект без изменений, и приложение silverlight в настоящее время представляет собой просто кнопку и текстовое поле.

Я запустил свой проект WCF в отладчике и могу загрузить URL-адрес .svc в своем браузере, а также перейти к WSDL.

Используя svcutil.exe, я создал прокси-класс c # на основе этого WSDL. Я не использовал параметр / async, поэтому мой прокси-класс действительно имеет только 1 вызов удаленного метода, единственный метод GetData (int value), который возвращает строку.

В своем коде страницы Silverlight я создаю новый экземпляр моей службы, а затем пытаюсь вызвать GetData ().

SliverServiceClient client = new SliverServiceClient ();
client.GetData(1234);

В моем проекте silverlight я добавил следующую конфигурацию конечной точки / контракта в ServiceReferences.ClientConfig

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding
         name="basicHttpBinding_ISliverService"
         closeTimeout="00:01:00"
         openTimeout="00:01:00"
         receiveTimeout="00:15:00"
         sendTimeout="00:01:00"
         maxBufferSize="65530"
         maxReceivedMessageSize="65530"
         textEncoding="utf-8">
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint
       address="http://localhost:8181/SliverService.svc"
       binding="basicHttpBinding"
       bindingConfiguration="basicHttpBinding_ISliverService"
       contract="ISliverService"
       name="basicHttpBinding_ISliverService" />
    </client>
  </system.serviceModel>
</configuration>

Обратите внимание, что я использую basicHttpBinding, поскольку, насколько я понимаю, это единственная привязка WCF, поддерживаемая Silverlight.

Моя проблема в том, что во время выполнения вызов client.GetData (1234) дает мне исключение NullReferenceException. Я подтвердил в отладчике, что клиент не null. Если я проверяю «клиента» из отладчика, я вижу, что следующие значения не null: ChannelFactory, Endpoint, State. Свойства Channel и InnerChannel выдают ошибку «невозможно оценить» в отладчике.

Я замечаю в прокси-классе, что GetData (значение int) просто

base.Channel.GetData(value);

Отладчик не позволит мне войти в прокси-класс, чтобы увидеть, является ли Channel пустым, но, похоже, это может быть only , если это не что-то из библиотеки ServiceModel.

Внутреннего исключения нет, и трассировка стека выглядит следующим образом:

at System.ServiceModel.Channels.Remoting.RealProxy.Invoke(Object[] args)
at proxy_2.GetData(Int32 )
at SliverServiceClient.GetData(Int32 accountID)
at Sliver.Page.MakeSliverCall(Object state)
at Sliver.Page..ctor()
at Sliver.App.Application_Startup(Object sender, StartupEventArgs e)
at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName)

У меня нет , есть конфигурация конечной точки в веб-проекте ASP.NET web.config (хотя я пробовал ее и получал ту же ошибку).

Что, черт возьми, я здесь не так делаю? Кажется, это должно быть довольно просто.

1 Ответ

0 голосов
/ 08 июня 2009

Если я правильно понимаю, у вас есть проект ASP.NET, в котором размещается служба WCF (размещена ли она в IIS или в процессе?). Затем у вас есть клиент Silverlight, который должен использовать эту службу, и исключение возникает при запуске этого клиента. Это все?

Не могли бы вы попробовать протестировать свой сервис с помощью WcfTestClient? (http://msdn.microsoft.com/en-us/library/bb552364.aspx). Проверяя это, вы могли бы сказать, является ли ошибка Сервиса или Клиента (я бы сказал, что это клиент, поскольку это не какое-то удаленное исключение).

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