我需要什么 uri 模式才能从手持设备与 PC 进行通信?

2024-01-06

正如我被提醒的那样here https://stackoverflow.com/questions/22306678/why-am-i-getting-unable-to-connect-to-the-remote-server,我可能需要使用“ppp_peer”以编程方式从我的 Compact Framework 应用程序连接到在我的 PC 上运行的 Web API 应用程序。

我已经尝试过这个(用“ppp_peer”替换IP地址):

string uri = string.Format("http://ppp_peer:28642/api/FileTransfer/GetHHSetupUpdate?serialNum={0}&clientVersion={1}", serNum, clientVer);

...但我明白,“空引用异常”在“Main”中(在此之前我得到“无法连接到远程服务器”)。

我在服务器代码中有一个断点,但它没有达到该断点,所以它一定是在客户端中发生这种情况的某个地方。

上下文中的客户端代码是:

string uri = string.Format("http://ppp_peer:28642/api/FileTransfer/GetHHSetupUpdate?serialNum={0}&clientVersion={1}", serNum, clientVer);
RESTfulMethods.DownloadNewerVersionOfHHSetup(uri);
. . .
public static void DownloadNewerVersionOfHHSetup(string uri)
{
    string dateElements = DateTime.Now.ToString("yyyyMMddHHmmssfff", CultureInfo.InvariantCulture);
    var outputFileName = string.Format("HHSetup_{0}.exe", dateElements);
    try
    {
        var webRequest = (HttpWebRequest)WebRequest.Create(uri);
        var webResponse = (HttpWebResponse)webRequest.GetResponse();
        string statusCode = webResponse.StatusCode.ToString();
        if (statusCode == "NoContent")
        {
            MessageBox.Show("You already have the newest available version.");
        }
        else
        {
            var responseStream = webResponse.GetResponseStream();
            using (Stream file = File.Create(outputFileName))
            {
                CopyStream(responseStream, file);
                MessageBox.Show(string.Format("New version downloaded to {0}", outputFileName));
            }
        }
    }
    catch (WebException webex)
    {
        string msg = webex.Message;
        string innerEx = webex.InnerException.ToString();
        string status = webex.Status.ToString();
        MessageBox.Show(string.Format("Message: {0}; Status: {1}; inner Ex: {2}", msg, status, innerEx));
    }
}

我需要 IP 地址吗此外ppp_peer,或者我的 URI 格式错误,或者...???

UPDATE

在“NRE”之后我还看到“”...遇到严重错误,必须关闭”

我更改了上面的代码以查看 ppp_peer 被翻译为:

IPAddress ipAd = Dns.Resolve("PPP_PEER").AddressList[0];
string IPAddr = ipAd.ToString();
MessageBox.Show(IPAddr);
string uri = string.Format("http://{0}:28642/api/FileTransfer/GetHHSetupUpdate?serialNum={1}&clientVersion={2}", IPAddr, serNum, clientVer);

MessageBox 调用显示“192.168.55.100”,这与我认为我的 PC 的 IP 地址不同......???

我也得到同样的结果:

IPAddress ipAd = Dns.GetHostEntry("PPP_PEER").AddressList[0];

UPDATE 2

使用这个代替(我从这里得到它[通过 ActiveSync 连接时从 Windows Mobile 获取主机 PC 的 IP 地址 https://stackoverflow.com/questions/461957/get-ip-address-of-host-pc-from-windows-mobile-when-connected-via-activesync%5D):

IPAddress ipAd = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];

...显示的 IP 地址是“one up”(192.168.55.101),我得到的不是 NRE,而是:

消息:无法连接到远程服务器;状态:连接失败;内部示例:System.Net.Sockets.SocketException:无法建立连接,因为目标计算机在 System.Net.Sockets.SocketConnectNoCheck(EndPoint RemoteEP) 处主动拒绝连接...

所以看来我正在客户端尽我所能,服务器听到敲门声,但没有开门 - 我是对的吗?

顺便说一句,出于好奇我还添加了这段代码:

string hostName = Dns.GetHostName();
MessageBox.Show(string.Format("host name is {0}", hostName));

......我看到“视窗CE"

UPDATE 3

根据这个帖子 http://community.appamundi.com/blogs/andywigley/archive/2008/11/24/accessing-restful-astoria-data-services-in-net-compact-framework.aspx作者:Andy Wiggly(撰写“MS .NET Compact Framework”的猫/家伙),您do使用“ppp_peer”:

HttpWebRequest request = REST.CreateRequest(@"http://ppp_peer/DataServicesWebsite/NorthwindService.svc/Customers",
              HttpMethods.GET, String.Empty, @"application/atom+xml", "", "");

最有趣的是缺少端口分配(“:28642”或其他);然而,这种风格也给了我一个 NRE(是的,有点像 Null Ready to Eat)。

UPDATE 4

那么从手持设备访问主机需要什么uri呢?

我已经尝试了客户端/Compact Framework 应用程序中的所有以下排列,但没有一个起作用:

IPAddress ipAd = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
string IPAddr = ipAd.ToString();

//string uri = string.Format("http://ppp_peer/api/...
//string uri = string.Format("http://ppp_peer:28642/api...
//string uri = string.Format("http://PPP_PEER/api/...
string uri = string.Format("http://PPP_PEER:28642/api/...
//string uri = string.Format("http://{0}:28642/api/...
//string uri = string.Format("http://192.168.125.50:28642/api/...
//string uri = string.Format("http://Platypus:28642/api/...
RESTfulMethods.DownloadNewerVersionOfHHSetup(uri);

该错误发生在该客户端代码中的某个地方(无法单步执行,所以我不知道确切的位置),因为我在显示的最后一行上有一个断点,并且永远不会到达它。

服务器(Web API)代码:

[Route("api/FileTransfer/GetUpdatedHHSetup")]
public HttpResponseMessage GetUpdate(string serialNum, string clientVersion)
{
    return _fileTransfer.GetHHSetupUpdate(serialNum, clientVersion);
}

public HttpResponseMessage GetHHSetupUpdate(string serialNum, string clientVersion)
{
    HttpResponseMessage result;
    string filePath = GetAvailableUpdateForCustomer(serialNum); // <= breakpoint on this  
        line

我在 DownloadNewerVersionOfHHSetup() 中放置了一些调试行,现在它看起来像这样:

public static void DownloadNewerVersionOfHHSetup(string uri)
{
    MessageBox.Show("Made it into DownloadNewerVersionOfHHSetup");
    string dateElements = DateTime.Now.ToString("yyyyMMddHHmmssfff", 
CultureInfo.InvariantCulture);
    var outputFileName = string.Format("HHSetup_{0}.exe", dateElements);
    try
    {
        var webRequest = (HttpWebRequest)WebRequest.Create(uri);
        MessageBox.Show("Made it into DownloadNewerVersionOfHHSetup #2");
        var webResponse = (HttpWebResponse)webRequest.GetResponse();
        MessageBox.Show("Made it into DownloadNewerVersionOfHHSetup #3");
        . . .

我从未见过“#3”,所以这一定是 GetResponse() 调用中的问题,但我怎样才能准确找出问题所在呢?我得到了 NRE,然后“...遇到严重错误,必须关闭"

这是它尝试调用服务器的地方,但正如前面提到的,它永远不会到达被调用的服务器方法......

UPDATE 5

事实证明这现在有效:

http://192.168.125.50:28642/api/

...其主要原因是我的路由属性 (GetUpdatedHHSetup) 与我从客户端调用的属性 (GetHHSetupUpdate) 之间不匹配。一旦我对齐这些行星,NRE 就消失了,我得到了预期的结果。


uri/连接字符串中不需要 PPP_PEER。现在可以使用主机 PC 的 IP 地址(以及服务器/Web API 应用程序的端口号)(修复路由属性与客户端调用的内容之间的不匹配之后)。

我认为使用机器名称也可以。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我需要什么 uri 模式才能从手持设备与 PC 进行通信? 的相关文章

随机推荐

  • API 级别 24 中已弃用 ApplicationTestCase

    我创建了一个默认的空项目安卓工作室2 1 2 with API 24 在示例项目中 Google 提供了一个折旧的类应用测试用例 https developer android com reference android test Appl
  • 界面不使用显示模板

    我在显示模板以及处理接口和实现该接口的对象时遇到问题 在示例中 我有许多对象 我想以固定的方式呈现它们 我决定创建一个界面并在视图中引用它 我决定将其放入共享显示模板文件夹中 DisplayFor似乎不适用于传递给它的在视图中实现接口的对象
  • 如何获得本地组中的所有用户(性能良好)

    我寻找解决方案很长一段时间 但我找到的所有解决方案都非常慢 我想获取本地 Windows 组中的所有用户 该组当然也可以包含AD组 因此结果应该包含属于该组本身成员的所有用户and所包含的 AD 组的用户 您知道性能良好的解决方案吗 您尝试
  • 如何在叠加箱线图和条形图时删除重复的图例

    您可以轻松制作的最酷的东西之一seaborn is boxplot stripplot组合 import matplotlib pyplot as plt import seaborn as sns import pandas as pd
  • JDBC UPDATE With preparedStatement 导致 java.sql.SQLException:参数索引超出范围(3 > 参数数量,即 2)[重复]

    这个问题在这里已经有答案了 我面临着java sql SQLException 参数索引超出范围 3 gt 参数数量 即 2 更新一列或两列时 重置信息 表有五列 id mobile tower id reset value date ti
  • 安装 slack 应用程序时如何收到通知?

    我有一个要求 我必须为我的 slack bot 进行一些初步设置 我想做的是 当我的 slack 应用程序安装到工作区时收到通知 向工作区管理员发送包含说明 设置手册的私人消息 我在看松弛event API https api slack
  • OSHI:获取给定路径的 HWDiskStore

    我正在使用奥希https github com oshi oshi https github com oshi oshi来监控硬件 有一个方法 HWDiskStore getDisks https github com oshi oshi
  • 保护内存中的凭据[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我将接收用户名和密码并将其存储在结构中 我该如何防止某人查看我的进程的内存并查看用户的用户名 密码 我的第一个想法是对内存中的用户名和密码进行加密 并
  • 打开弹出窗口,单击链接,在父窗口中打开,关闭弹出窗口?

    我需要帮助 我想要在我的页面上做的是打开一个弹出窗口 我使用它 a class txt button Buy Now a 单击弹出窗口上的链接时 我希望它在主窗口中打开并关闭弹出窗口 我已经尝试了很多方法 但无法让它发挥作用 我想你可以使用
  • Dagger 2 - 为什么这是一个依赖循环?

    我正在尝试注入应用程序的Context到另外 2 个对象中 一个AuthManager and an ApiClient 它们都取决于所述上下文 并且ApiClient取决于AuthManager 为什么这是一个依赖循环 如果Context
  • 通过 Azure DevOps 使用专用终结点部署应用服务

    当我使用专用端点运行 Azure 应用程序服务的发布管道时 会发生以下错误 错误 无法获取 Kudu 应用程序设置 错误 IP 被禁止 代码 403 有什么建议吗 原因是当您向 Web 应用程序添加专用端点时 该应用程序的所有 Intern
  • Rails 3:作用域返回一个数组

    我正在使用范围来获取特定用户的项目 在项目模型中 belongs to user scope for user lambda user where user id gt user 用户模型 has many items Problem 打电
  • if __name__ == '__main__' 函数调用

    我正在尝试解决我在需要构建的一段代码中遇到的问题 我有一个 python 模块 我需要能够导入并传递参数 然后由主模块解析这些参数 我得到的看起来像这样 main py if name main sys argv pass argument
  • ViewModel:未解析的参考

    我想实施ViewModel到我的应用程序中 但我无法导入viewModels or activityViewModels 尝试遵循教程 但它对我来说仍然是未解决的参考 private val userViewModel ProfileFlo
  • MyBatis - 一对多 - 未为映射列设置值

    我正在使用 MyBatis 访问数据库 为此 我开设了以下课程 class ClassA private int id private List
  • MS SQL Server 2005 - 存储过程“自发中断”

    客户端在执行存储过程时重复报告非常奇怪的行为 他们的代码可以运行易失性数据集的缓存转置 如果满足以下条件 则编写存储过程来按需重新处理数据集 1 自上次重新处理以来数据集发生了变化2 数据集5分钟内没有变化 第二个条件在变化期间停止大量重复
  • 在 R 中绘制数据;错误:类型“列表”未实现默认方法

    我正在尝试在 ggplot 中绘制数据 我也尝试了来自 github 的 CRAN 版本 但最终出现错误 Error in is finite x default method not implemented for type list 这
  • 默认情况下如何使手风琴打开第一个元素?

    我在我的项目中使用引导手风琴 这里正在工作fiddler http jsfiddle net 68gk8 237 这是 HTML 代码 div div div div
  • .NET Framework 4.5 目录在哪里?

    我已经安装了 Windows 8 Visual Studio 2012 但没有 v4 5 目录 WINDIR Microsoft NET Framework 我是否做错了什么 或者 NET 4 5 与其他版本不同 如果是因为我没有安装工具
  • 我需要什么 uri 模式才能从手持设备与 PC 进行通信?

    正如我被提醒的那样here https stackoverflow com questions 22306678 why am i getting unable to connect to the remote server 我可能需要使用