2

コンソール アプリケーション (.NET 4.0) で WCF サービスをホストしています。サービス コード ( msdn の例から):

using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;

namespace WCFServiceHost
{
    [ServiceContract(Namespace = "WCFServiceHost")]
    public interface ICalculator
    {
        [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
        MathResult DoMathJson(double n1, double n2);

        [WebInvoke(ResponseFormat = WebMessageFormat.Xml, BodyStyle = WebMessageBodyStyle.Wrapped)]
        MathResult DoMathXml(double n1, double n2);

    }

    public class CalculatorService : ICalculator
    {

        public MathResult DoMathJson(double n1, double n2)
        {
            return DoMath(n1, n2);
        }

        public MathResult DoMathXml(double n1, double n2)
        {
            return DoMath(n1, n2);
        }

        private MathResult DoMath(double n1, double n2)
        {
            MathResult mr = new MathResult();
            mr.sum = n1 + n2;
            mr.difference = n1 - n2;
            mr.product = n1 * n2;
            mr.quotient = n1 / n2;
            return mr;
        }
    }

    [DataContract]
    public class MathResult
    {
        [DataMember]
        public double sum;

        [DataMember]
        public double difference;

        [DataMember]
        public double product;

        [DataMember]
        public double quotient;
    }
}

次はコンソール アプリのコードです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace WCFServiceHost
{
    class Program
    {
        public static void Main()
        {
            var adrs = new Uri[1];
            adrs[0] = new Uri("http://localhost:3980");
            using (ServiceHost serviceHost = new ServiceHost(typeof(CalculatorService), adrs))
            {
                try
                {
                    // Open the ServiceHost to start listening for messages.
                    serviceHost.Open();

                    // The service can now be accessed.
                    Console.WriteLine("The service is ready.");
                    Console.WriteLine("Press <ENTER> to terminate service.");
                    Console.ReadLine();

                    // Close the ServiceHost.
                    serviceHost.Close();
                }
                catch (TimeoutException timeProblem)
                {
                    Console.WriteLine(timeProblem.Message);
                    Console.ReadLine();
                }
                catch (CommunicationException commProblem)
                {
                    Console.WriteLine(commProblem.Message);
                    Console.ReadLine();
                }
            }
        }
    }
}

そして私の2つの質問:

1._http://localhost:3980 を開くと、次のようになります。 ここに画像の説明を入力 メタデータの公開を有効にする方法は?大福の回答を参照してください。

  1. このサービスからデータを取得する方法 - ( msdn の例のようにサービスからデータを取得するには)? Web フレームワーク ( Nancyなど) を埋め込むか、HttpListener を使用しますか?
4

3 に答える 3

2

WCF Web 構成が正しく設定されていることを確認する必要があります

http get のメタデータを有効にする必要があります。system.serviceModel -> behaviors -> serviceBehaviors -> behavior -> serviceMetadata で Web 構成を確認してください。

そして、あなたが持っていることを確認してください:

<serviceMetadata httpGetEnabled="true"/>

パート 2 では、データを取得できます。次のようなことができます。

   public MathResult GetResult(int a, int b) {
        var status = new MathResult();
        try {
                    var myBinding = new WSHttpBinding();
                    var myEndpoint =
                        new EndpointAddress(
                            new Uri("http://localhost:3980/"));
                    var myChannelFactory = new ChannelFactory<ICalculator>(myBinding, myEndpoint);
                    ICalculator client = myChannelFactory.CreateChannel();
            status = client.DoMathJson(a,b);
        } catch (Exception e) {
            //do something proper here 
        }
        return status;
    }
于 2013-10-18T06:34:11.940 に答える