无法从Windows Mobile 5使用WCF服务:未找到端点

时间:2010-04-29 17:13:10

标签: wcf .net-3.5 windows-mobile

我正在试图弄清楚如何从Windows智能手机调用WCF服务。我有一个非常简单的智能手机控制台应用程序,除了启动和拨打该服务之外什么都不做。该服务只返回一个字符串。我能够实例化代理类,但是当我调用该方法时,它会引发异常:

  

没有终点收听   http://mypcname/Service1.svc/basic那个   可以接受这个消息。这是   通常由不正确的地址引起   或SOAP动作。请参阅InnerException,if   目前,了解更多详情。

内部异常:

  

无法建立连接   网络

我尝试按照this教程使用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>

1 个答案:

答案 0 :(得分:1)

我认为您的问题是因为在IIS中,端点地址始终被认为是相对于代表服务的.svc文件的地址。

您在basicHttp端点中使用了一个空地址,因此这将仅解析.svc文件的路径。

我会建议两件事。由于您在IIS上托管,添加“basic”作为basicHttpBinding的地址并删除主机基址,这是多余的。

每个MSDN:您必须始终为IIS托管的服务端点使用相对端点地址。如果端点地址未指向承载公开端点的服务的IIS应用程序,则提供完全限定的端点地址(例如,http://localhost/MyService.svc)可能会导致服务部署出错。使用托管服务的相对端点地址可以避免这些潜在的冲突