我在控制台应用程序(.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我得到:
如何启用元数据发布? 请参阅Dai Bok的回答。
答案 0 :(得分:2)
您需要确保正确设置WCF Web配置
您需要为http获取启用元数据,在中检查您的Web配置 system.serviceModel - &gt;行为 - &gt; serviceBehaviors - &gt;行为 - &gt; serviceMetadata
并确保您拥有:
<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;
}
答案 1 :(得分:0)
您的第一个问题已解决: 但如果你们两个在一起会更好。 它用于元数据生成:
对于第2部分:为了将数据提供给客户端,您使用HttpWebRequest并从客户端调用服务。
答案 2 :(得分:0)