Giter VIP home page Giter VIP logo

hprose-dotnet's Introduction

Hprose

Hprose 3.0 for .NET

Join the chat at https://gitter.im/hprose/hprose-dotnet

Package Name .NET platform lastest-version download
Hprose.IO Supported .NET Framework versions: 4.5.1+ Supported .NET Core versions: 2.0+ Supported .NET Compact Framework versions: 3.5+ Supported .NET Standard versions: 2.0+ NuGet NuGet
Hprose.RPC Supported .NET Framework versions: 4.5.1+ Supported .NET Core versions: 2.0+ Supported .NET Compact Framework versions: 3.5+ Supported .NET Standard versions: 2.0+ NuGet NuGet
Hprose.RPC.Plugins Supported .NET Framework versions: 4.5.1+ Supported .NET Core versions: 2.0+ Supported .NET Compact Framework versions: 3.5+ Supported .NET Standard versions: 2.0+ NuGet NuGet
Hprose.RPC.Codec.JSONRPC Supported .NET Framework versions: 4.5.1+ Supported .NET Core versions: 2.0+ Supported .NET Compact Framework versions: 3.5+ Supported .NET Standard versions: 2.0+ NuGet NuGet
Hprose.RPC.Owin Supported .NET Framework versions: 4.5.1+ Supported .NET Core versions: 2.0+ Supported .NET Standard versions: 2.0+ NuGet NuGet
Hprose.RPC.AspNet Supported .NET Framework versions: 4.5.1+ NuGet NuGet
Hprose.RPC.AspNetCore Supported .NET Core versions: 2.0+ NuGet NuGet

Introduction

Hprose is a High Performance Remote Object Service Engine.

It is a modern, lightweight, cross-language, cross-platform, object-oriented, high performance, remote dynamic communication middleware. It is not only easy to use, but powerful. You just need a little time to learn, then you can use it to construct cross language cross platform distributed application system.

Hprose supports many programming languages, for example:

  • AAuto Quicker
  • ActionScript
  • ASP
  • C++
  • Dart
  • Delphi/Free Pascal
  • dotNET(C#, Visual Basic...)
  • Golang
  • Java
  • JavaScript
  • Node.js
  • Objective-C
  • Perl
  • PHP
  • Python
  • Ruby
  • TypeScript
  • ...

Through Hprose, You can intercommunicate conveniently and efficiently between those programming languages.

This project is the implementation of Hprose for .NET.

hprose-dotnet's People

Contributors

andot avatar cooclsee avatar dependabot[bot] avatar gitter-badger avatar jtone123 avatar xiaoyifang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hprose-dotnet's Issues

序列化DataTable栏位数大于9个就出错了

栏位少时正常,序列化为 a203{c5"Table"6{s5"logId"s5"level"s7"content".....

栏位数大于9个就出错了,序列化为 a1{c5"Table"i14;{s7"orderId"s7"orderNo"s7"s.....

感觉正常应该是 a1{c5"Table"14 而不是 a1{c5"Table"i14;

注册服务里面的方法为Task方法,并且Task无返回值时会出现调用异常

异常:Unable to cast object of type 'Hprose.IO.Deserializers.CharsDeserializer' to type 'Hprose.IO.Deserializers.IObjectDeserializer'
注册服务方法示例:
public class TestServer:ITestServer
{
public async Task Test(string input)
{
......;
}
}

调用示例:
public async Task Test(string input)
{
var server = _client.UseService();
await server.Test(input);
}
调用客户端采用接口调用方式,调用方法已经正确执行,但是RPC客户端会返回异常信息。
例外:如果调用的Task方法有返回值,则可以调用成功,如:
public async Task《string》 Test(string input)
经过进一步测试发现,如果调用的时候不加await则不会出现异常,希望能给与一定的指导

新版跨域的问题。

最新版取消了HproseHttpListenerServer?请问我要怎么解决跨域的问题?谢谢!

3.0 版範例程式

您好,
請問是否能夠提供 3.0 版的使用範例,尤其是關於 推送功能

謝謝

Can't find Websocket client

Hello guys,

I've been using the hprose WebSocketService() for Go for some time but I couldn't find a way to use it with the dotnet client. Is there any way to do this?

Hprose推送

请问有没有.net的推送插件使用说明?

如果 service 需要依赖注入 仓储 ,该怎么 new

 private IRepository<TSinglePipeline, string> _repository;

public TestAppService(IRepository<TSinglePipeline, string> repository)
{
     _repository = repository;
}
HttpListener server = new HttpListener();
server.Prefixes.Add("http://127.0.0.1:8080/");
server.Start();
var service = new Service();
service.AddInstanceMethods(new TestAppService()).Bind(server);

似乎Hprose.IO 3.0又发现问题,C#版byte[]序列化有问题

似乎Hprose.IO 3.0又发现问题,C#版byte[]序列化有问题,我不知道bug在哪里,场景是这样的:

我在服务器上做了个下载文件的RPC,每次从服务器的一个压缩文件读取100K数据byte[]返回,循环下载完后到本地,发现压缩文件损坏不能用。 但是用旧版的Hprose.IO就OK,用Newtonsoft的Json序列化也OK,所以应该是Hprose.IO 3.0 C#版byte[]序列化有问题~~

子类对象反序列化问题

请问一下有没有好的方式,处理子类对象的序列化。我遇到一种情况是在使用Hprose序列化时,以父类申明的变量接收一个由子类创建的对象,将这个对象序列化过后,只有父类的数据,反序列化也没办法获得子类对象的数据。

设置接收数据的编码格式问题

AcceptEncoding设置编码格式好像没有生效。接口返回数据包含utf8mb4格式字符串,未进行任何设置时报错提示“bad utf-8 encoding at 0xf0”,然而设置AcceptEncoding设置任何其他编码格式,仍然提示该错误

事务

可能与项目无关,core 请问能实现rpc服务调用rpc服务,就是嵌套事务差不多的功能,scope不能在core里用,

跨源请求问题

服务端用dotnet版本,客户端用html5版本
服务端设置 : “IsCrossDomainEnabled = true;”
客户端还是提示禁止访问资源,CORS 头缺少 'Access-Control-Allow-Origin'。
请问如何解决?

1.5.8 UWP调用服务方法造成未响应的问题

你好,在1.5.8版本中uwp客户端调用服务端函数,使用以下语句:
client.Invoke("Hello",new Object[]{"bbbb"});
可以调用到server程序,但不会返回客户端调用处,且会造成uwp客户端程序未响应。
麻请问有没有解决办法?

Common/HproseContext.cs

   Common/HproseContext.cs

126: public void GetByte(string key, byte value) { //
127: userdata[key] = value;
128: }

ioc实现hprose的注册

就是我的hprose的注册,如何通过IOC容器来实现,而不是通过new这个hprose的类,来实现服务的注册

Hprose.Rpc 是不支持业务线程池的吗?多路复用模型都没实现?

测试代码:
服务端:

public partial class ChatService
    {       
        public string Query(string id, int seconds)
        {
            Console.WriteLine($"Query data {id} in {seconds}s. at {DateTime.Now.ToString("HH:mm:ss.fff")}");
            Thread.Sleep(seconds * 1000);
            Console.WriteLine($"{id} returned in {seconds}s. at {DateTime.Now.ToString("HH:mm:ss.fff")}");
            return id;
        }

    }

客户端:

static void Main(string[] args)
        {
            for (int i = 0; i < 1000; i++)
            {
                Task.Run(StartClient);
            }
            while (Console.ReadLine() != "exit")
            {

            }
        }
static readonly string[] service = new string[] {"http://127.0.0.1:1000/",
"http://127.0.0.1:1001/",
"http://127.0.0.1:1002/",
"http://127.0.0.1:1003/",
"http://127.0.0.1:1004/",
"http://127.0.0.1:1005/",
"http://127.0.0.1:1006/",
"http://127.0.0.1:1007/",
"http://127.0.0.1:1008/",
"http://127.0.0.1:1009/"
 };
        static int id = 0;
        private static void StartClient()
        {
            int myId = ++id;
            Hprose.RPC.Client client = new Hprose.RPC.Client(service);
            IChatService chatService= client.UseService<IChatService>();
            string content= chatService.Query(myId.ToString(), 3);
            Console.WriteLine(content);
        }

输出结果:

Started service http://127.0.0.1:1000/
Started service http://127.0.0.1:1001/
Started service http://127.0.0.1:1002/
Started service http://127.0.0.1:1003/
Started service http://127.0.0.1:1004/
Started service http://127.0.0.1:1005/
Started service http://127.0.0.1:1006/
Started service http://127.0.0.1:1007/
Started service http://127.0.0.1:1008/
Started service http://127.0.0.1:1009/
Query data 5 in 3s. at 09:28:10.013
5 returned in 3s. at 09:28:13.015
Query data 6 in 3s. at 09:28:13.029
6 returned in 3s. at 09:28:16.030
Query data 7 in 3s. at 09:28:16.031
7 returned in 3s. at 09:28:19.032
Query data 8 in 3s. at 09:28:19.033
8 returned in 3s. at 09:28:22.034
Query data 9 in 3s. at 09:28:22.036

TCP 服务器不支持 .NET 1.x

虽然 .NET 1.x 没有人用了,但是因为现在对 .NET CF 1.0 都支持,所以理论上支持 .NET 1.x 也没有问题。

Hprose .Net异步调用异常导致程序崩溃关闭

我在hprose异步调用的时候发现一个严重的问题,如果有异常,将会捕获不到,导致应用程序崩溃,比如,我把Hprose服务器关了,客户端程序崩溃了。
client.Invoke("functionName", new object[] { clientid }, c =>
{});

关于U3D和iOS的问题

u3d 用 dotnet 版本的hprose,在android上运行正常,但在iOS上运行出问题了,hprose服务端未能接收数据。请问如何使用呢?能否提供步骤文档?

不知道为什么反序列化DataTable总是空的??

不知道为什么反序列化DataTable总是空的??

string s = "a3{c5"Table"5{s6"menuId"s8"parentId"s8"menuName"s8"menuType"s7"orderBy"}o0{s6"MA0001"ns4"个人中心"uA0}o0{s6"MA0002"ns4"基础资料"uA2}o0{s6"MA9999"ns2"关于"uAl99;}}";
byte[] b = Encoding.UTF8.GetBytes(s);
DataTable dt = Hprose.IO.Formatter.Deserialize(b);

请问推送功能性能

订阅的Client是通过Socket与Server建立连接的吗?Server的一个端口大约可以支持多少个Client订阅

AddInstanceMethods中的BUG

if (Array.IndexOf(instanceMethodsOnObject, methodInfo.Name) != -1)
这块的代码,意思应该是排除添加GetHashCode等object基类中的方法。
所以此处应该改成==-1才对

.Net版本DataTable支持

下面是Write和Read方法,主要是將DataTable轉ObjectArray,在ObjectArray中用xml保存了DataTable的定義,這樣做使用沒有問題,速度目前也還行,但是畢竟多了一次DataTable與ObjectArray的轉換,不夠原生,不清楚有沒有更好更直接的方法?

    public void WriteDataTableWithRef(DataTable dt) {
        if (string.IsNullOrWhiteSpace(dt.TableName))
            dt.TableName = "DataTable";

        int k = 0;
        int r = dt.Rows.Count;
        int c = dt.Columns.Count;
        object[] o = new object[r * c + 3];

        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        System.Xml.XmlWriter writer = System.Xml.XmlWriter.Create(sb);
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(DataTable));
        serializer.Serialize(writer, dt.Clone());
        writer.Close();

        o[k] = r;
        k = k + 1;
        o[k] = c;
        k = k + 1;
        o[k] = sb;
        k = k + 1;

        for (int i = 0; i < r; i++)
        {
            for (int j = 0; j < c; j++)
            {
                o[k] = dt.Rows[i][j];
                k = k + 1;
            }
        }       

        if (!refer.Write(o)) WriteArray(o);
    }


    public DataTable ReadDataTable() {
        object[] o = ReadObjectArray();
        
        int k = 0;
        int r = int.Parse(o[k].ToString());
        k = k + 1;
        int c = int.Parse(o[k].ToString());
        k = k + 1;

        System.IO.StringReader strReader = new System.IO.StringReader(o[k].ToString());
        System.Xml.XmlReader xmlReader = System.Xml.XmlReader.Create(strReader);
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(DataTable));
        DataTable dt = serializer.Deserialize(xmlReader) as DataTable;
        k = k + 1;

        for (int i = 0; i < r; i++)
        {
            DataRow dr = dt.NewRow();
            for (int j = 0; j < c; j++)
            {
                dr[j] = o[k];
                k = k + 1;
            }
            dt.Rows.Add(dr);
        }
        dt.AcceptChanges();
        return dt;
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.