在 WCF REST 服务中调用 WebGet 时出错

Posted

技术标签:

【中文标题】在 WCF REST 服务中调用 WebGet 时出错【英文标题】:Getting Error when call WebGet in WCF REST Service 【发布时间】:2021-03-25 21:21:46 【问题描述】:

我是 WCF 服务的新手。 我在哪里做错了。

在动态端口so中创建服务,这样写 客户端在 Asp.net 检查一些在线参考资料。但不明白。

服务器

创建服务:

strAdr = "http://" + strHost + ":" + nPort.ToString() + "/WCFService";
Uri adrbase = new Uri(strAdr);

m_svcHost = new WebServiceHost(typeof(WCFService), adrbase);

ServiceMetadataBehavior mBehave = new ServiceMetadataBehavior();
mBehave.HttpGetEnabled = true;
m_svcHost.Description.Behaviors.Add(mBehave);
m_svcHost.AddServiceEndpoint(typeof(IMetadataExchange), 
MetadataExchangeBindings.CreateMexHttpBinding(), "mex");

WebHttpBinding httpb = new WebHttpBinding();
m_svcHost.AddServiceEndpoint(typeof(IWCFService), httpb, strAdr);
m_svcHost.Open();

Debug.WriteLine("\n\nService is Running as >> " + strAdr);

服务类

   [ServiceContract]
   public interface IWCFService 
   
       [WebGet(UriTemplate = "/Test", ResponseFormat = WebMessageFormat.Json, 
       BodyStyle=WebMessageBodyStyle.Bare)]
       [OperationContract]
       string Test();

       [OperationContract]
       [WebInvoke(UriTemplate = "/StoreDetails", RequestFormat = WebMessageFormat.Json, ResponseFormat = 
       WebMessageFormat.Json, Method = "POST")]
       bool StoreDetails(Info_Data configInfo);
   

   [AspNetCompatibilityRequirements
           (RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
   public class WCFService : IWCFService
   
      Info_Data config = new config();
      public string Test()
      
           Console.WriteLine("MSG Come....");
           return "Hello";
      

      public bool StoreDetails(Info_Data configInfo)
      
          config.id = configInfo.id;
          config.name = configInfo.name;
      
   

Asp.Net 客户端

[ServiceContract]

public interface IWCFService


    [OperationContract]
    string Test();

    [OperationContract]
    bool StoreDetails(Info_Data configInfo);

   
WebChannelFactory<IWCFService> chFactMathClient ;

    public bool CreateService()
    
        strServiceHost = "localhost";

        string strEPAdr = "http://" + strServiceHost + ":" + intServicePort.ToString() + "/WCFService";
        chFactMathClient = new WebChannelFactory<IWCFService>(new WebHttpBinding(), new Uri(strEPAdr));
       
        System.ServiceModel.Description.WebHttpBehavior behavior = new 
        System.ServiceModel.Description.WebHttpBehavior();

        behavior.DefaultOutgoingRequestFormat = System.ServiceModel.Web.WebMessageFormat.Json;
        behavior.DefaultOutgoingResponseFormat = System.ServiceModel.Web.WebMessageFormat.Json;
        chFactMathClient.Endpoint.Behaviors.Add(behavior);

        mathObj = chFactMathClient.CreateChannel();
      
        return true;
    

当我请求 WebInvoke 时它正在工作,但为什么它不能与 WebGet 一起工作

我不知道这是访问服务的正确方式。

chFactMathClient.Test(); //访问数据

【问题讨论】:

【参考方案1】:

服务器和客户端之间的合同不匹配导致您的问题。所以在 Asp.Net 客户端上添加 WebGet 属性。

 [WebGet(UriTemplate = "/Test", ResponseFormat = WebMessageFormat.Json, 
       BodyStyle=WebMessageBodyStyle.Bare)]
       [OperationContract]
       string Test();

【讨论】:

你是对的。它正在工作。非常感谢

以上是关于在 WCF REST 服务中调用 WebGet 时出错的主要内容,如果未能解决你的问题,请参考以下文章

WCF Rest ERR_CONNECTION_RESET 响应不大

WCF REST - 使用复杂类型的“获取”

无法以 GET 类型的方法将字典作为参数传递给 WCF REST 服务

WCF REST入门套件 - 名称为“UriTemplateMatchResults”的属性已存在

WCF Rest 服务和 protobuf-net

如何使用 wcf REST 服务获取自定义对象的 json 响应?