C#WCF服务没有IIS,WSDL无法正常工作



我必须创建一个没有IIS的WCF SOAP应用程序,但我只是一个初学者。

我可以在浏览器上调用方法" addiere",但我想通过WSDL查看方法列表。

program.cs:

class Program
{
    private static ServiceHost _wcfServiceHost = null;
    static void Main(string[] args)
    {
        _wcfServiceHost = new ServiceHost(typeof(WcfTransferservice.Service1), new Uri("http://localhost:8000"));
        _wcfServiceHost.AddServiceEndpoint(typeof(WcfTransferservice.IService1), new BasicHttpBinding(), "Soap");
        ServiceEndpoint endpoint = _wcfServiceHost.AddServiceEndpoint(typeof(WcfTransferservice.IService1), new WebHttpBinding(), "Web");
        endpoint.Behaviors.Add(new WebHttpBehavior());
        try
        {
            _wcfServiceHost.Open();
            Console.WriteLine("");
            Console.WriteLine("This can also be accomplished by navigating to");
            Console.WriteLine("http://localhost:8000/Web/EchoWithGet?s=Hello, world!");
            Console.WriteLine("in a web browser while this sample is running.");
            Console.WriteLine("");
            Console.WriteLine("Press [Enter] to terminate");
            Console.ReadLine();
            _wcfServiceHost.Close();
        }
        catch (CommunicationException cex)
        {
            Console.WriteLine("An exception occurred: {0}", cex.Message);
            _wcfServiceHost.Abort();
            Console.ReadLine();
        }
    }
}

iservice1.cs:

 // HINWEIS: Mit dem Befehl "Umbenennen" im Menü "Umgestalten" können Sie den Schnittstellennamen "IService1" sowohl im Code als auch in der Konfigurationsdatei ändern.
[ServiceContract]
public interface IService1
{
    [OperationContract]
    [WebGet]
    int Addiere(int a, int b);
    [OperationContract]
    [WebGet]
    int Multipliziere(int a, int b);
}

web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- Legen Sie die Werte unten vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Metadateninformationen zu vermeiden. -->
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
          <!-- Damit in Fehlern Ausnahmedetails zum Debuggen angezeigt werden, legen Sie den Wert unten auf "true" fest. Legen Sie ihn vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Ausnahmeinformationen zu vermeiden. -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
        Um das Stammverzeichnis der Webanwendung beim Debuggen auszuwählen, legen Sie den Wert unten auf "true" fest.
        Legen Sie ihn vor der Bereitstellung auf "false" fest, um die Veröffentlichung von Informationen über den Webanwendungsordner zu vermeiden.
      -->
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

我可以称之为" addiere"这样的方法:

http://localhost:8000/web/addiere?a = 4&amp; b = 8

但是我该如何调用WSDL显示所有方法?

我们需要向服务主机添加服务元数据行为,请参阅以下代码。

Uri uri = new Uri("http://localhost:9900");
            WebHttpBinding binding = new WebHttpBinding();
           ServiceHost sh=new ServiceHost(typeof(MyService),uri);
            ServiceEndpoint se = sh.AddServiceEndpoint(typeof(IService), binding, "");
            se.EndpointBehaviors.Add(new WebHttpBehavior());
            ServiceMetadataBehavior smb;
            smb = sh.Description.Behaviors.Find<ServiceMetadataBehavior>();
            if (smb==null)
            {
                smb = new ServiceMetadataBehavior()
                {
                    HttpGetEnabled = true
                };
                sh.Description.Behaviors.Add(smb);
            }
            //Add MEX service endpoint to make the call from the third party possible.
            Binding mexbinding = MetadataExchangeBindings.CreateMexHttpBinding();
            sh.AddServiceEndpoint(typeof(IMetadataExchange), mexbinding, "mex");
            sh.Open();
            Console.WriteLine("service is ready");
            Console.ReadLine();
            sh.Close();

如果我们想通过添加服务参考来调用服务,则需要添加MEX端点。实际上,当添加服务元数据行为时,可以使用WSDL。默认URL是

http://localhost:9900/?wsdl

随时让我知道是否有我可以帮助的。

相关内容

  • 没有找到相关文章

最新更新