Я пытаюсь выяснить, как вызвать службу WCF со смартфона Windows. У меня очень простое консольное приложение для смартфона, которое только запускает и делает 1 звонок в сервис. Служба просто возвращает строку. Я могу создать экземпляр прокси-класса, но когда я вызываю метод, он выдает исключение:
Конечная точка не прослушивала
http://mypcname/Service1.svc/basic что
мог принять сообщение. Это
часто вызвано неправильным адресом
или действие SOAP. Смотрите InnerException, если
настоящее время, для более подробной информации.
Внутреннее исключение:
Не удалось установить соединение с
сеть.
Я пытался следовать этому руководству по настройке служб с помощью Windows Mobile.
Я использовал NetCFSvcUtil для создания прокси-классов. У меня есть служба, работающая на IIS на моей машине, и Util использует wsdl из этого места. Я создал базовую http-привязку, как предложено в статье, и я думаю, что указал прокси на правильном URI.
Вот некоторые разделы соответствующего кода на случай, если это будет полезно увидеть. Если у кого-то есть какие-либо предложения, я был бы очень признателен. Я не уверен, что еще я могу ткнуть, чтобы заставить эту вещь работать.
Спасибо!
Клиент, (Program.cs):
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
namespace WcfPoC
{
class Program
{
static void Main(string[] args)
{
try
{
Service1Client proxy = new Service1Client();
string test = proxy.GetData(5);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.InnerException.Message);
Console.WriteLine(e.StackTrace);
}
}
}
}
Выдержка из прокси клиента (Service1.cs):
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
public partial class Service1Client : Microsoft.Tools.ServiceModel.CFClientBase<IService1>, IService1
{
//modified according to the walk thru linked above...
public static System.ServiceModel.EndpointAddress EndpointAddress = new System.ServiceModel.EndpointAddress("http://boston7/Service1.svc/basic");
/*
*a bunch of code create by the svc util - left unmodified
*/
}
Служба (Service1.svc.cs):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WcfService1
{
// NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config and in the associated .svc file.
public class Service1 : IService1
{
public string GetData(int value) //i'm calling this one...
{
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
}
Сервисный интерфейс (IService1.cs):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WcfService1
{
// NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in Web.config.
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetData(int value); //this is the call im using...
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// TODO: Add your service operations here
}
// Use a data contract as illustrated in the sample below to add composite types to service operations.
[DataContract]
public class CompositeType
{
/*
* ommitted - not using this type anyway...
*/
}
}
Выдержка из Web.config:
<services>
<service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
<host>
<baseAddresses>
<add baseAddress="http://boston7/" />
</baseAddresses>
</host>
</service>
</services>