使用c#消费Datasnap服务器

本文关键字:服务器 Datasnap 消费 使用 | 更新日期: 2023-09-27 18:19:17

我有一个Datasnap服务器,我需要用windows手机消费数据。

TSituacaoProxy类,当i发送参数(Id)时,返回的必须是JSON对象。

但是错误显示:

对象引用未设置为对象的实例。

我代码:

 private void clique(object sender, RoutedEventArgs e)
    {
        DSRESTConnection connection = new DSRESTConnection();
        connection.setHost("10.0.0.10");
        connection.setPort(8080);
        connection.setProtocol("http");
        connection.setUserName("master");
        connection.setPassword("C28861C83BD5397187FD55D04C2547F9");
        connection.setContext("datasnap/REST");
        DSProxy.TSituacaoProxy Proxy = new DSProxy.TSituacaoProxy(connection, ExceptionCallback);
        TJSONObject jObject = TJSONObject.Parse("22");
        Proxy.Loader(jObject, (TJSONObject Result) =>
        {
            MessageBox.Show(Result.ToString()); 
        }, ExceptionCallback);
    }

    public void ExceptionCallback(Exception e)
    {
        MessageBox.Show(e.Message);
    }

TSituacaoProxy等级:

public class TSituacaoProxy : DSAdmin
{
  public TSituacaoProxy(DSRESTConnection Connection, ExceptionCallback ExCal)
      : base(Connection, ExCal)
  {
  }
  private DSRESTParameterMetaData[] TSituacaoProxy_teste_Metadata;
  private DSRESTParameterMetaData[] get_TSituacaoProxy_teste_Metadata()
  {
    if (TSituacaoProxy_teste_Metadata == null)
    {
      TSituacaoProxy_teste_Metadata = new DSRESTParameterMetaData[]
      {
        new DSRESTParameterMetaData("xValue", DSRESTParamDirection.Input, DBXDataTypes.WideStringType, "string"),
        new DSRESTParameterMetaData("", DSRESTParamDirection.ReturnValue, DBXDataTypes.WideStringType, "string"),
      };
    }
    return TSituacaoProxy_teste_Metadata;
  }

Loader法:

public delegate void LoaderCallback(TJSONObject Result);
  public void Loader(TJSONObject xId, LoaderCallback callback = null, ExceptionCallback ExCal = null)
  {
    DSRESTCommand cmd = getConnection().CreateCommand();
    cmd.setRequestType(DSHTTPRequestType.POST);
    cmd.setText("TSituacaoProxy.Loader");
    cmd.prepare(get_TSituacaoProxy_Loader_Metadata());
    InternalConnectionDelegate LoaderDel = () =>
    {
      if (callback != null)
      {
        try
        {
          callback.DynamicInvoke((TJSONObject)cmd.getParameter(1).getValue().GetAsJSONValue());
        }
        catch (Exception ex)
        {
          if (ExCal != null) getConnection().syncContext.Send(new SendOrPostCallback(x => ExCal.DynamicInvoke(ex.InnerException)), null);
          else getConnection().syncContext.Send(new SendOrPostCallback(x => BaseExCal.DynamicInvoke(ex.InnerException)), null);
        }
      }
    };
    cmd.getParameter(0).getValue().SetAsJSONValue(xId);
    getConnection().execute(cmd, this, LoaderDel, ExCal);
  }
  private DSRESTParameterMetaData[] TSituacaoProxy_Select_Metadata;
  private DSRESTParameterMetaData[] get_TSituacaoProxy_Select_Metadata()
  {
    if (TSituacaoProxy_Select_Metadata == null)
    {
      TSituacaoProxy_Select_Metadata = new DSRESTParameterMetaData[]
      {
        new DSRESTParameterMetaData("xAssorts", DSRESTParamDirection.Input, DBXDataTypes.JsonValueType, "TJSONArray"),
        new DSRESTParameterMetaData("", DSRESTParamDirection.ReturnValue, DBXDataTypes.JsonValueType, "TJSONArray"),
      };
    }
    return TSituacaoProxy_Select_Metadata;
  }

使用c#消费Datasnap服务器

修改dsrestconnection.cs中的代码

        HttpWebRequest Client = (HttpWebRequest)WebRequest.Create(URL + "?" + DateTime.Now.Ticks.ToString());

到this

HttpWebRequest Client =(HttpWebRequest)WebRequestCreator.ClientHttp。创建新的Uri(URL + "?")+ DateTime.Now.Ticks.ToString ()));