我在控制台应用程序(.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();
}
}
}
}
}
还有我的两个问题:
1.当我打开 _http://localhost:3980 我得到:
如何启用元数据发布?见戴博回答。