WCF app.config代码

时间:2014-03-19 13:35:44

标签: c# wcf telerik self-hosting telerik-reporting

我有一个大问题

我使用此配置获得了自托管服务。

<bindings>
      <basicHttpBinding>
        <binding name="NewBinding0" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
      </basicHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="ReportServiceBehavior" name="ConsoleApplication1.ReportService">
        <endpoint address="ReportService" binding="basicHttpBinding" bindingConfiguration="NewBinding0" contract="ConsoleApplication1.IParameterService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="ReportService/resources" behaviorConfiguration="WebBehavior" binding="webHttpBinding" contract="Telerik.Reporting.Service.IResourceService" />
        <endpoint address="" behaviorConfiguration="WebBehavior" binding="webHttpBinding" contract="Telerik.Reporting.Service.IClientAccessPolicy" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:54321" />
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="ReportServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="WebBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
    </behaviors>

它有效!

但是我需要通过代码进行配置,所以我从app.config中删除了配置并试图像这样启动服务

host = new System.ServiceModel.ServiceHost(typeof(ReportService), new System.Uri("http://localhost:54321"));
                BasicHttpBinding binding = new BasicHttpBinding() { MaxBufferPoolSize = int.MaxValue, MaxBufferSize = int.MaxValue, MaxReceivedMessageSize = int.MaxValue };

               var g =  host.AddServiceEndpoint(typeof(IParameterService), binding, "ReportService" /*Url here can either be empty or the same one as serviceUri*/);
               EndpointAddress myEndpointAdd = new EndpointAddress(new System.Uri("http://localhost:54321/ReportService"),
               EndpointIdentity.CreateDnsIdentity("localhost"));
               g.Address = myEndpointAdd;



               var d1 =  host.AddServiceEndpoint(typeof(Telerik.Reporting.Service.IResourceService), new WebHttpBinding(), "ReportService/resources" /*Url here can either be empty or the same one as serviceUri*/);
               var d2 =  host.AddServiceEndpoint(typeof(Telerik.Reporting.Service.IClientAccessPolicy), new WebHttpBinding(), "" /*Url here can either be empty or the same one as serviceUri*/);
               d1.Behaviors.Add(new WebHttpBehavior());
               d2.Behaviors.Add(new WebHttpBehavior());


                host.Description.Behaviors.Add(new ServiceMetadataBehavior() { HttpGetEnabled = true });

                ServiceMetadataBehavior smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
                if (smb == null)
                    smb = new ServiceMetadataBehavior();




                smb.HttpGetEnabled = true;
                smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.open

我做错了什么?

1 个答案:

答案 0 :(得分:0)

错误讯息是什么?服务根本没有运行?

我认为你缺少Console.ReadKey(); - 需要保留host.open

参考http://msdn.microsoft.com/en-us/library/ee939340.aspx