Я новичок в 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);
}
Оба варианты работы примера кода, если я пытаюсь это из консоли клиента приложения.
Любые идеи о том, что мне здесь не хватает?
Я уже прочитал сообщения, которые вы упомянули. Включение трассировки WCF сделал трюк. У меня было несколько конечных точек в моей конфигурации сервиса, и служба прослушивала другую конечную точку. Изменение порядка конечных точек заставило моего клиента WP7 поговорить с сервисом WCF. Thanks – Snak3byte
Прохладный! Я рад, что все это работает для вас сейчас :) – indyfromoz