需要NIH的网络服务

时间:2016-06-28 21:20:31

标签: c# asp.net json web-services wcf

我的公司正在使用名为NIH Toolbox的ipad应用程序。它收集信息,完成后您可以通过Web服务将数据上传到Web位置。所以我在visual studio 2015中创建了一个休息网络服务,它适用于我,但不适用于NIH工具箱软件。该手册包含一个可以与其应用程序一起使用的Web服务示例,但我无法确定从哪里开始使用它们包含的代码。

要使用的示例webservice配置参考: 如果在iPad上启用了导出到Web,则此应用程序生成的所有数据将立即通过Web服务发送到用户设置的URL。 数据导出到Web功能将.csv文件发布到app用户指定的Web位置。数据导出到Web安全性以基本身份验证的形式处理。应将Web服务设置为接受基本身份验证。 Web服务实现还应该确认以json对象的形式成功传输文件。

  • 数据上传网络服务

    o表单操作:POST

    o表单请求参数:  上传:可选。数据附加到此变量。

    o表单响应json对象格式:

    {

    “error”:error_code,(错误代码为0表示成功传输文件)。   “message”:“message”(可选)

    }

.NET中的Web服务实现示例(c#):

/***************** BASIC AUTHENTICATION */
if (ctx.Request.HttpMethod == "OPTIONS")
{
   ctx.Response.ContentType = "text";
   ctx.Response.ContentEncoding = Encoding.UTF8;
   ctx.Response.AppendHeader("Content-Length", "0");
   ctx.Response.AppendHeader("Connection", "keep-alive");
   ctx.Response.AppendHeader("Access-Control-Allow-Origin", "*");
   ctx.Response.AppendHeader("Access-Control-Allow-Headers", "Authorization, Origin, content-type, accept");
   ctx.Response.AppendHeader("Access-Control-Allow-Credentials", "true");
   ctx.Response.AppendHeader("Access-Control-Allow-Methods", "OPTIONS, GET, POST");
   return;
}
if (ctx.Request.Headers["Authorization"] == null)
{
   ctx.Response.StatusCode = 401;
   ctx.Response.AppendHeader("WWW-Authenticate", "Basic");
   return;
}

//validate authentication
if 
(!Authenticate.ValidateRequest(ctx.Request.Headers["Authorization"].ToString()))
{
     ctx.Response.StatusCode = 401;
     return;
}

//save file
     if (ctx.Request.HttpMethod.ToUpper() == "POST")
{
      try
      {
         if (ctx.Request.Files.Count > 0)
         {
            HttpPostedFile myFile = ctx.Request.Files[0];
            if (myFile != null && myFile.ContentLength > 0)
            {
               Stream fileContents = myFile.InputStream;
               string fileName = Path.GetFileName(myFile.FileName);
              string path = 
           Path.Combine(ctx.Server.MapPath("~/UploadedData"), fileName);
               myFile.SaveAs(path);
               ctx.Response.ContentType = "application/json";
               ctx.Response.Write("{\"error\":\"0\"}");
               return;
            }
       }
       else
       {
          ctx.Response.StatusCode = 1;
          return;
       }
  }
  catch (Exception e)
  {
      ctx.Response.StatusCode = 1;
      return;
  }
}

我没有花大量时间处理这样的网络服务。如果一个好人能够把我推向正确的方向,我会非常感激。

0 个答案:

没有答案