无法访问WCF自托管Winform服务中的localhost

时间:2014-01-01 20:41:22

标签: c# .net winforms wcf

在form_Load()中使用此示例... Hosting WCF service inside a Windows Forms application ...与4.5 VS2012中的Winform应用程序 它加载正常但无法在浏览器中访问...错误无法访问' localhost'

    private ServiceHost Host;

    private void frmAdmin_Load(object sender, EventArgs e)
    {
        Host = new ServiceHost(typeof(bklvmain_v4.BTestService));
        if (Host == null)
            Host.Open();
    }

    private void closeToolStripMenuItem_Click(object sender, EventArgs e)
    {
            if (Host != null)
                Host.Close();
    }

App config ...

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="bklvmain_v4.BTestServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="bklvmain_v4.BTestServiceBehavior"
          name="bklvmain_v4.BTestService">
        <endpoint address="" binding="wsHttpBinding" contract="bklvmain_v4.IBTestService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost/BTestService/" />
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel> 

...接口

[ServiceContract]
public interface IBTestService
{
    [OperationContract]
    Tickers[] BTestLong(string dte);

    [OperationContract]
    Tickers[] BTestShort(string dte);
}

2 个答案:

答案 0 :(得分:0)

你永远不会打开主持人:

private void frmAdmin_Load(object sender, EventArgs e)
{
    Host = new ServiceHost(typeof(bklvmain_v4.BTestService));
    // if (Host == null)  
    // Could be if (Host != null), but the check is not required here anyways
    Host.Open();
}

由于您检查了if (Host==null),并且刚构建了Host,检查将始终失败,您永远不会致电.Open()

答案 1 :(得分:0)

再次感谢@Reed - 似乎我可能已经在实际工作但很难说 - 因为我说没有网络可访问的服务方法....进一步的实验...... (2014年的新词)...... !! .ps ..我的2014决议是不要使用'但是''然而','我告诉你什么......','猜什么','你知道什么','看','所以......(开始声明) ,或者其他被忽视的愚蠢术语......就像'反正'......所以,这里又一次......进一步的实验......(!!)..在winform中测试wcf服务可能比我们想象的要容易,但它是很难找到正确的文档..我怎么知道MS说只是启动vs cmd提示并加载WCFTestClient.exe但是为什么有人甚至知道VS cmnd提示符存在的位置。根据这一点,位置在'开始 - &gt;中。 VS Tools下的“程序”栏,实际上,通过运行C:\ WcfTestClient.exe然后包含<'http://localhost/mexBTestService'>上面'mex'配置的修改后的端点地址,实际上可以验证服务是否成功运行!! !祝大家新年快乐!和快乐的编码!!