gpt4 book ai didi

xml - WCF REST 问题、绑定(bind)、配置

转载 作者:数据小太阳 更新时间:2023-10-29 02:46:46 26 4
gpt4 key购买 nike

我正在使用 json 开发 WCF 休息界面。我已将该服务包装在 Windows 服务中以托管该服务,但我现在无法调用该服务。我不确定到底出了什么问题。

基本思想是我想在远程服务器上托管服务,因此我希望服务映射到端口 localhost:7600,以便可以通过将数据发布到 [server_ip]:7600 来调用它。问题很可能出在配置文件中,因为我是 WCF 和 Rest 的新手,所以我不确定要为配置键入什么内容,如果一团糟,我们深表歉意。

我删除了几 block 代码和注释,使其更易于阅读。这些函数应该与服务无关,因为它们仅调用 C# 函数。

编辑: 我查看了建议的帖子,并重写了代码,但不幸的是,它仍然无法正常工作。 Mabye 我只是使用了错误的地址,您可以使用 http://localhost:7600 调用它,对吧?

编辑: 感谢大家的帮助。问题是您不能将 ServiceHost 与使用 UriTemplate 的属性一起使用。因此,如果我删除它,该服务至少会工作一半。不过,我仍然停留在一个部分。该服务需要可通过 HTTP 请求调用,就像您可以使用 Fiddler 生成一样。关于我将如何做到这一点有什么想法吗?

编辑: NVM,这是一个愚蠢的问题。将数据发布到 http://localhost:7600/PCMiler_Connect_Imple并返回 json 数据。再次感谢大家。

编辑:所以这对遇到同样问题的其他人更有帮助,我添加了现在的代码,并带有一个 json 调用示例。

WCF 服务接口(interface)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Data;

namespace PCMiler_Service
{
[ServiceContract]
public interface IPCMiler_Connect
{
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json), //code corrected
OperationContract]
List<string> PCMiler_Connect_Imple(ZIP_List_Container container);
}
}

WCF 服务实现

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

namespace PCMiler_Service
{
[DataContract]
public class ZIP_List_Container
{
[DataMember]
public string[] ZIP_List { get; set; }
[DataMember]
public string Optimized { get; set; }
[DataMember]
public string Calc_Type { get; set; }
[DataMember]
public string Cross_International_Borders { get; set; }
[DataMember]
public string Use_Kilometers { get; set; }
[DataMember]
public string Hazard_Level { get; set; }
[DataMember]
public string OK_To_Change_Destination { get; set; }
}

public class PCMiler_Connect : IPCMiler_Connect
{
public List<string> PCMiler_Connect_Imple(ZIP_List_Container container)
{
return container.ZIP_List.ToList<string>();
}
}
}

XML 配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="PCMiler_Service.PCMiler_ConnectBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="jsonBehavior" >
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="PCMiler_Service.PCMiler_ConnectBehavior"
name="PCMiler_Service.PCMiler_Connect">
<endpoint address="" behaviorConfiguration="jsonBehavior" binding="webHttpBinding"
contract="PCMiler_Service.IPCMiler_Connect" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:7600/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>

服务包装器

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.ServiceModel;
using System.Text;
using System.Threading;

namespace PCMiler_Service
{
public partial class PCMiler_Service : ServiceBase
{
ServiceHost host;
Thread thread;

public PCMiler_Service()
{
InitializeComponent();
}

protected override void OnStart(string[] args)
{
host = new ServiceHost(typeof(PCMiler_Connect));
host.Open();
}

protected override void OnStop()
{
if (host != null)
{
host.Close();
host = null;
}
}
}
}

使用 HTTP 的 JSON POST 示例

POST /PCMiler_Connect_Imple HTTP/1.1
HOST: localhost:7600
Content-Type: application/json
Content-Length: 84

{
"container": {
"ZIP_List":["29340","29614"]
}
}

最佳答案

可能是个愚蠢的问题,但是......你的界面在哪里?

如果你读到这里...

http://weblogs.asp.net/ralfw/archive/2007/04/14/a-truely-simple-example-to-get-started-with-wcf.aspx

...它(与 WCF 上的所有其他文章一样)暗示为了公开服务肯定需要接口(interface)声明,因为它还定义了客户端使用服务时使用的数据契约(Contract)。

然而,这看起来不像您的典型 WCF 服务,更像是一个正常的老式 Windows 服务,它不是 WCF 服务(您应该从该链接中看到),但是您似乎已经尝试使用一些 WCF组成部分(如契约(Contract)属性)。

我认为你的问题是缺少接口(interface)声明,我认为 WCF 需要这个。

关于xml - WCF REST 问题、绑定(bind)、配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2862536/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com