php中文网

PHP 函数如何与 C# 交互:跨越 .NET 边界

php中文网

如何让 php 函数与 c# 交互?使用 com interop:允许 php 和 c# 对象通过 com 组件进行通信。使用 web 服务:利用 http 协议在不同的系统之间传输数据。

PHP 函数如何与 C# 交互:跨越.NET 边界

在现代应用程序开发中,跨语言交互变得越来越重要。本指南将探讨如何使用 PHP 和 C# 在各种复杂场景中轻松实现跨语言交互。

先决条件

立即学习“PHP免费学习笔记(深入)”;

  • 安装 PHP
  • 安装.NET Core SDK
  • 一些 C# 编程基础知识

方法 1:使用 COM Interop

COM(组件对象模型)允许 PHP 和 C# 对象相互通信。

PHP 代码:

<?php

$com = new COM("Word.Application");
$com->Visible = true;
$com->Documents->Add();

?>

C# 代码:

using System.Runtime.InteropServices;

namespace CsToPhp;

public class Program
{
    [DllImport("mscoree.dll")]
    public static extern void CoCreateInstance(
        [MarshalAs(UnmanagedType.LPStruct)] Guid rclsid,
        IntPtr pUnkOuter,
        int dwClsContext,
        [MarshalAs(UnmanagedType.LPStruct)] Guid riid,
        [MarshalAs(UnmanagedType.IUnknown)] out object ppv);

    public static void Main(string[] args)
    {
        var guid = new Guid("00020980-0000-0000-C000-000000000046");
        object word;

        CoCreateInstance(guid, IntPtr.Zero, 4, guid, out word);
    }
}

实战案例:使用 COM 来读取 Microsoft Word 文档的内容。

方法 2:使用 Web 服务

Web 服务是一种使用 HTTP 协议在不同系统之间交换信息的标准方法。

PHP 代码:

<?php

$client = new SoapClient("http://localhost:8080/service.asmx?wsdl");
$result = $client->HelloWorld();

?>

C# 代码:

using System.Web.Services.Description;
using System.Web.Services.Discovery;
using System.Xml;

namespace CsToPhp;

public class Program
{
    public static void Main(string[] args)
    {
        // 发现 Web 服务
        DiscoveryClientProtocol discoClient = new DiscoveryClientProtocol();
        discoClient.Discover("http://localhost:8080/service.asmx?wsdl");

        // 检索服务描述
        ServiceDescription description = discoClient.Documents[0] as ServiceDescription;
        var port = description.Services[0].Ports[0];

        // 动态创建代理并调用 Web 服务
        var wsdlUrl = "http://localhost:8080/service.asmx?wsdl";
        var endpointAddress = new EndpointAddress(wsdlUrl);
        var binding = new BasicHttpBinding();

        var factory = new ChannelFactory<ICsToPhp>(binding, endpointAddress);
        ICsToPhp client = factory.CreateChannel();

        string result = client.HelloWorld();
    }
}

[WebService(Namespace = "http://cs-to-php.com/")]
public interface ICsToPhp
{
    [WebMethod]
    string HelloWorld();
}

实战案例:使用 Web 服务从 PHP 应用程序调用 C# 方法。

以上就是PHP 函数如何与 C# 交互:跨越 .NET 边界的详细内容,更多请关注php中文网其它相关文章!