none
找不到服务啊,大师。 RRS feed

  • 问题

  • 找不到服务啊,大师。

    Contracts:

    [ServiceContract(Name = "GatherService", Namespace = "http://www.yostec.com/")]
    public interface IGather
    {
    [OperationContract]
    int Add(string DANo, DateTime DATime, DateTime LogTime, string MeterNo, string MeterType, double Qty);


    }

    Services:
    public class GatherService:IGather
    {
    public int Add(string DANo, DateTime DATime, DateTime LogTime, string MeterNo, string MeterType, double Qty)
    {
    return 1;
    }
    }


    public class Common
    {
    public static int HostGatherService()
    {
    int flag=0;
    using (ServiceHost host = new ServiceHost(typeof(GatherService)))
    {
    host.AddServiceEndpoint(typeof(IGather), new WSHttpBinding(), "http://127.0.0.1:9999/GatherService");
    if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
    {
    ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
    behavior.HttpGetEnabled = true;
    behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/GatherService/metadata");
    host.Description.Behaviors.Add(behavior);
    }
    host.Opened += delegate
    {
    flag = 1;
    };

    host.Open();

    }

    return flag;

    }
    }


    Winform下服务启动:

    private void MainForm_Load(object sender, EventArgs e)
    {
    if (Common.HostGatherService() == 1)
    {
    this.Text = "服务已启动";
    }
    }

    问题一:
    大师,IE浏览器下“http://127.0.0.1:9999/GatherService/metadata”找不到服务元数据,但从断点执行上看服务启动了。 怎么回事呢?

    问题出在哪里呢?  大师。。。

    问题二:

    ServiceHost host = new ServiceHost(typeof(GatherService))  和“.scv”文件的用法有什么不同呢?    在“Winform”和“WPF”中使用“WCF”好像没有“。scv”文件可以用???

    一个是“代码控制”服务配置,一个“文件配置”服务是吗???

    如果,服务支持“TCP”和“Http”之间的切换,是不是就应该使用“ServiceHost”???

    问题三:

    在宿主程序中加一个“app.config”,服务也不会自己去读取配置信息吧。   必须在宿主程序上写代码读取,是吗???

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <system.serviceModel>
    <behaviors>
    <serviceBehaviors>
    <behavior name="metadataBehavior">
    <serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:9999/GatherService/metadata" />
    </behavior>
    </serviceBehaviors>
    </behaviors>
    <services>
    <service behaviorConfiguration="metadataBehavior" name="Services.GatherService">
    <endpoint address="http://127.0.0.1:9999/GatherService" binding="wsHttpBinding" contract="Contracts.IGather" name="GatherService"/>
    </service>
    </services>
    </system.serviceModel>
    </configuration>


    Science and technology is my lover.


    2012年11月6日 1:43

答案

全部回复

  • using 去掉,就可以在IE中看到源数据了

    参照:http://msdn.microsoft.com/zh-cn/library/aa738489.aspx


    http://blog.csdn.net/zx13525079024

    2012年11月6日 5:32
  • 大师,问题解决了。

    using释放资源了,把“using”去除就可以了。

    大师可不可以再问一个问题:

    WFC中怎样进行身份认证???

    “服务”只能被“校园网”中指定“应用程序”调用,其它“应用程序”是不能调用的。怎样进行认证呢???

    在“调用方法”中加一个“参数”叫做密码吗??? 在这个方法中进行判断吗??? 

    Science and technology is my lover.


    2012年11月6日 6:32
  • 身份认证的方法很多,最简单的就是你给每一个调用者一个用户名和密码,如果不匹配,就不允许进行调用。

    也可以使用其他办法,参照

    http://www.cnblogs.com/Moosdau/archive/2011/04/20/2022710.html


    http://blog.csdn.net/zx13525079024

    2012年11月6日 7:00
  • 大师,谢谢您,小弟理解的对吗???

    一种是,先判断客户端和服务端的证书,然后判断“用户名”和“密码”是吗? 客户端和服务端都要安装证书。        还是使用证书对“用户名”和“密码”进行加密???   

    一种是,将“用户名”和“密码”添加到“WCF”的消息头,然后判断消息内容,是吗?


    Science and technology is my lover.

    2012年11月7日 3:04
  • 可以把用户名和密码添加到WCF消息头,然后判断用户名和密码是否正确,这样比较简单,

    个人感觉没必要使用证书,你自己衡量下你的服务是否需要使用证书来判断。


    http://blog.csdn.net/zx13525079024

    2012年11月7日 5:15