当你想要创建一个简单的 WCF 接口时,可以遵循以下步骤:
首先,创建一个新的 C# 项目(比如一个类库项目)并添加一个接口。以下是一个简单的示例:
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。
// 定义服务契约
[ServiceContract]
public interface IYourService
{
[OperationContract]
string DoWork(string str);
}
接下来,实现这个接口。这里是一个简单的实现例子
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的类名“Service1”。
// 实现接口
public class YourService : IYourService
{
public string DoWork(string str)
{
// 这里可以实现接口方法的具体逻辑
// 在这个例子中,简单地返回输入字符串
return "Received: " + str;
}
}
接着,需要配置服务。可以通过配置文件(如 App.config 或 Web.config)或者代码来完成。下面是一个简单的配置例子:
using System;
using System.ServiceModel;
namespace YourNamespace
{
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri(“http://localhost:8000/YourService”);
ServiceHost host = new ServiceHost(typeof(YourService), baseAddress);
try
{
host.AddServiceEndpoint(typeof(IYourService), new BasicHttpBinding(), “YourService”);
host.Open();
Console.WriteLine(“The service is ready at {0}”, baseAddress);
Console.WriteLine(“Press to stop the service.”);
Console.ReadLine();
host.Close();
}
catch (CommunicationException ex)
{
Console.WriteLine(“An exception occurred: {0}”, ex.Message);
host.Abort();
}
}
}
}
在这个简单的示例中,一个基于 HTTP 的基本绑定(BasicHttpBinding)被用于设置服务终结点,并且服务在 http://localhost:8000/YourService 地址上监听。
这些只是创建一个简单的 WCF 接口的基本步骤。实际应用中,你可能需要更复杂的配置、安全性设置、异常处理等。参考文档或其他教程可以帮助你更深入地了解和扩展 WCF 服务。
QT调用
QString xmlData = “<?xml version=\"1.0\" encoding=\"utf-8\"?>” “<soap:Envelope xmlns:soap=“http://schemas.xmlsoap.org/soap/envelope/” xmlns:tns=“http://tempuri.org/”>”
“soap:Body”
“tns:DoWork”
“tns:str1234</tns:str>”
“</tns:DoWork>”
“</soap:Body>”
“</soap:Envelope>”;
QUrl url("http://localhost:8000/YourService/YourService");
QNetworkRequest request(url);
request.setHeader(QNetworkRequest::ContentTypeHeader, "text/xml; charset=utf-8");
request.setRawHeader("SOAPAction", "\"http://tempuri.org/IYourService/DoWork\"");
QNetworkAccessManager manager;
QNetworkReply *reply = manager.post(request, xmlData.toUtf8());
QObject::connect(reply, &QNetworkReply::finished, [=]() {
if (reply->error() == QNetworkReply::NoError) {
QString response = QString::fromUtf8(reply->readAll());
// 处理响应数据
} else {
qDebug() << "Error:" << reply->errorString();
}
reply->deleteLater();
});
QObject::connect(&a, &QCoreApplication::aboutToQuit, [&](){
manager.deleteLater();
});
return a.exec();