1

こんにちは、コード ビハインドを使用して wcf を構成しようとしています。コードは次のとおりです。

public static void Configure(ServiceConfiguration config)   
{



    string configPath = ConfigurationManager.AppSettings["wcfconfigDBPath"];

    // Enable “Add Service Reference” support 
    config.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
    // set up support for http, https, net.tcp, net.pipe 
    if (isEnabled(configPath, "enablehttp"))
        config.EnableProtocol(new BasicHttpBinding());
    if (isEnabled(configPath, "enablenettcp"))
        config.EnableProtocol(new NetTcpBinding());
    if (isEnabled(configPath, "enablepipe"))
        config.EnableProtocol(new NetNamedPipeBinding());

}
private static bool isEnabled(string path, string elementName)
{
    try
    {
        string elementValue = string.Empty;
        bool returnVal = false;
        using (XmlTextReader reader = new XmlTextReader(path))
        {

            reader.ReadToFollowing(elementName);
            if (reader.Read())
                elementValue = reader.Value;

        }
        if (!string.IsNullOrEmpty(elementValue))
        {
            bool.TryParse(elementValue, out returnVal);
        }
        return returnVal;

    }
    catch (Exception ex)
    {
        return false;
    }
}

上記のコードは機能しません。「static void Configure」がいつ起動されるかはわかりません。

私の質問は、サービスを停止せずに DB/xml 構成に基づいてプロトコルを有効/無効にする方法はありますか?

4

1 に答える 1

-1

おそらくあなたのケースで使用できる.NET 4.5の新機能:

注: configure メソッドは、サービス ホストが開かれる前に WCF によって呼び出されます。

Configure メソッドは、開発者がエンドポイントと動作を追加できるようにする ServiceConfiguration インスタンスを受け取ります。このメソッドは、サービス ホストが開かれる前に WCF によって呼び出されます。定義すると、app.config または web.config ファイルで指定されたサービス構成設定はすべて無視されます。次のコード スニペットは、Configure メソッドを定義し、サービス エンドポイント、エンドポイントの動作、およびサービスの動作を追加する方法を示しています。

public class Service1 : IService1
{
    public static void Configure(ServiceConfiguration config)
    {
        ServiceEndpoint se = new ServiceEndpoint(new ContractDescription("IService1"), new BasicHttpBinding(), new EndpointAddress("basic"));
        se.Behaviors.Add(new MyEndpointBehavior());
        config.AddServiceEndpoint(se);

        config.Description.Behaviors.Add(new ServiceMetadataBehavior { HttpGetEnabled = true });
        config.Description.Behaviors.Add(new ServiceDebugBehavior { IncludeExceptionDetailInFaults = true });
    }

    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }

    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {
        if (composite == null)
        {
            throw new ArgumentNullException("composite");
        }
        if (composite.BoolValue)
        {
            composite.StringValue += "Suffix";
        }
        return composite;
    }
}

完全な例については、https ://msdn.microsoft.com/en-us/library/hh205277(v=vs.110).aspx を参照してください。

于 2015-03-17T11:09:51.180 に答える