2011-03-17 72 views
2

我正在使用p4.net(perforce for .net)来连接我们的perforce服务器并运行一些命令。在web服务中使用p4.net

我创建了一个web服务并创建了一个测试调用(ConnectToServer),当我在本地测试这个web服务(localhost:xxxx/project/test.asmx)时,它完美地工作,但是,当我部署我的web服务到服务器,并调用我的“连接”网络方法,它出现并说无法连接Perforce服务器。

本地和服务器之间有什么区别,它们都使用相同的dll连接perforce,并且它们都是web服务,为什么你们认为它会在服务器上引发错误?那是配置问题?

回答

1

我会更深入地了解您如何以及在哪里实际设置Perforce连接参数。正如你所说的,用户名属性返回NETWORK_SERVICE,这表明Perforce用户没有明确设置,并且试图使用当前操作系统用户时回退。

只是为了验证这一点:尝试重新连接到Perforce服务器之前设置明确的代码立即相关P4Connection特性,如用户,密码和端口。这应该工作,除非您在Web服务器和Perforce服务器之间存在任何连接和/或保护问题(似乎并非如此)。

如果以上工作,并且您认为您已经在执行此操作 - 您是否有机会为一个P4Connection实例设置属性并将另一个用于实际连接尝试?

你也不会说你如何尝试设置凭证;你是否尝试使用例如p4集(在这种情况下不起作用)或环境变量(然后需要为正确的操作系统用户设置或全局设置),还是当前正在显式设置P4Connection属性,或者是什么?

更新: 海报试图使用P4HOST(或等效)而不是P4PORT,请参阅下面的注释。由于其他答复而进行的各种测试仍有一些意想不到的结果,但都可能与根本问题有关。

+0

使用(P4Connection实例=新P4Connection ()){ 尝试 { instance.User =“test”; instance.Password =“pwd”; instance.Host =“testdomain.org:1666”; instance.Connect(); 返回“连接”; } 赶上(异常前) { 返回ex.Message; } } – AnarchistGeek 2011-03-21 11:26:34

+0

上面的代码在Windows应用程序中完美工作。但不在Web服务器上。这是一个非常简单的测试,任何想法? – AnarchistGeek 2011-03-21 11:27:33

+0

@AnarchistGeek:使用instance.Port而不是instance.Host。主机告诉你客户端在哪里,而不是服务器在哪里。它可能在应用程序中成功,因为您在环境中设置了P4PORT或使用了p4集。 – rjnilsson 2011-03-21 11:38:45

1

您在Web服务web.config中使用哪种类型的身份验证/模拟?

哪个用户在远程服务器上运行服务?

此用户是否拥有Perforce的访问权限?

这些将是我的第一个问题。

+0

感谢您的回复戴夫。我在我的web.config中使用Windows身份验证。在IIS上,选中启用匿名访问,并将IUSR_Servername用作用户。这个用户基本上不在这个perforce上,它必须是? – AnarchistGeek 2011-03-17 16:48:39

+0

是的,当服务运行时,它会尝试连接到Perforce作为IUSR_Servername。我建议为此服务创建一个服务帐户用户,与Perforce对话,然后授予该用户权限。 – DaveRead 2011-03-17 16:51:39

+0

但我明确指定perforce用户帐户和密码,为什么它会尝试将perforce服务器连接为IUSR_Servername? – AnarchistGeek 2011-03-17 16:56:22

0

你能检查服务器上没有防火墙问题吗? p4.net的确切错误信息是什么?

+0

防火墙是关闭的,错误是P4API.Exceptions.PerforceInitializationError:!无法连接到Perforce服务器!无法连接到Perforce的!感谢 – AnarchistGeek 2011-03-18 09:06:11

+0

你可以用下面的命令行客户端连接服务器? – Shawn 2011-03-18 19:50:34

+0

我可以的,我也创建了一个简单的Windows项目和使用p4.api,工作正常。问题是,该API使用网络凭证用于连接到P4。因为当我得到的连接的用户名属性,则返回“NETWORK_SERVICE”,而不是P4的用户,即使我已明确规定的P4用户。 – AnarchistGeek 2011-03-21 09:47:48