2010-09-01 2 views
1

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

Служба конфигурации

<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); 
} 

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

Любые идеи о том, что мне здесь не хватает?

ответ

0

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

+0

Я уже прочитал сообщения, которые вы упомянули. Включение трассировки WCF сделал трюк. У меня было несколько конечных точек в моей конфигурации сервиса, и служба прослушивала другую конечную точку. Изменение порядка конечных точек заставило моего клиента WP7 поговорить с сервисом WCF. Thanks – Snak3byte

+0

Прохладный! Я рад, что все это работает для вас сейчас :) – indyfromoz

Смежные вопросы