Невозможно вызвать методы службы WCF из эмулятора Windows Phone 7 - PullRequest
1 голос
/ 01 сентября 2010

Я новичок в WCF и пытаюсь создать приложение для Windows Phone 7, которое вызывает автономную службу WCF. Я создал службу WCF, размещенную в консольном приложении. Мне не удается вызвать службу из приложения Windows 7, запущенного в эмуляторе, но я могу вызвать ее из другого приложения консоли клиента, работающего на том же компьютере, службы WCF. Код вызова службы и файлы конфигурации WCF одинаковы как для приложения Windows Phone, так и для приложения клиентской консоли.

Настройка службы

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="serviceBehavior">
          <serviceMetadata/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="BusinessServices.ServiceA" behaviorConfiguration="serviceBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="http://warp-core:8000"/>
          </baseAddresses>
        </host>
        <endpoint address="ServiceA" contract="BusinessServiceContracts.IServiceA" binding="basicHttpBinding"  />
        <endpoint binding="mexHttpBinding" bindingConfiguration="" name="mex" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

В проекте Windows Phone 7 мне удалось добавить ссылку на службу и сгенерировать прокси-классы для вызова службы.

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

<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BasicHttpBinding_IServiceA" closeTimeout="00:01:00"
            openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
            maxBufferSize="65536" maxReceivedMessageSize="65536" textEncoding="utf-8">
          <security mode="None" />
        </binding>
        <binding name="basicHttp" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
          <security mode="None" />
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="http://warp-core:8000/ServiceA" binding="basicHttpBinding"
          bindingConfiguration="BasicHttpBinding_IServiceA" contract="ServiceA.IServiceA"
          name="BasicHttpBinding_IServiceA" />
    </client>
  </system.serviceModel>
</configuration>

С телефона, если я пытаюсь вызвать службу асинхронно как

IServiceA m_proxyA;
public MainPage()
{
    InitializeComponent();

    m_proxyA = new ServiceAClient();
}

private void button1_Click(object sender, RoutedEventArgs e)
{
    IAsyncResult result = m_proxyA.BeginOperation1(Operation1Callback, null);
}

public void Operation1Callback(IAsyncResult ar)
{
    string result = m_proxyA.EndOperation1(ar);
}

Я получаю ServerTooBusyException с сообщением

The HTTP service located at http://warp-core:8000/ServiceA is too busy.

И если я попытаюсь использовать альтернативный подход блокировки для вызова службы следующим образом, приложение телефона зависнет, и следующий вызов метода никогда не вернется

private void button1_Click(object sender, RoutedEventArgs e)
{
    IAsyncResult result = m_proxyA.BeginOperation1(null, null);
    string output = m_proxyA.EndOperation1(result);
}

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

Есть идеи о том, чего мне здесь не хватает?

1 Ответ

0 голосов
/ 01 сентября 2010

Одним из первых пунктов, на который я посмотрю, является файл ClientConfig. Это присутствует в вашем проекте Windows Phone 7? Некоторые указания на вашу проблему можно найти в этом посте . Майк опубликовал некоторую полезную информацию здесь . Вы пытались включить трассировку в службе WCF, чтобы проверить, есть ли какая-либо проблема?

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