C# 对象未设置为使用web服务引用
基本上,我在一台服务器上有一个旧的asmx web服务,我有一个消费应用程序,它将此作为web参考,并可以查看可用的方法。另外,如果我转到web服务URI,我会得到一个标准页面,其中列出了所有这些URI 我试图创建一个“消费者”应用程序来证明它的工作原理,因为在“调试”模式下仅仅按“播放”是不够的,因为我们需要给客户提供如何使用它的示例 虽然当我在我的PC和localhost:5768上从VS 2010进行调试运行时,它100%工作,但我无法从我的消费者控制台应用程序让它工作 当我试图从web.config文件获取所需的连接字符串时,它引发了一个异常,即对象引用不存在 这在我以调试模式运行它时有效,但在我的消费者应用程序尝试运行它时无效,因为它加载了对正确服务URI的web引用 web.configf中的代码只是C# 对象未设置为使用web服务引用,c#,.net,visual-studio-2010,web-services,asmx,C#,.net,Visual Studio 2010,Web Services,Asmx,基本上,我在一台服务器上有一个旧的asmx web服务,我有一个消费应用程序,它将此作为web参考,并可以查看可用的方法。另外,如果我转到web服务URI,我会得到一个标准页面,其中列出了所有这些URI 我试图创建一个“消费者”应用程序来证明它的工作原理,因为在“调试”模式下仅仅按“播放”是不够的,因为我们需要给客户提供如何使用它的示例 虽然当我在我的PC和localhost:5768上从VS 2010进行调试运行时,它100%工作,但我无法从我的消费者控制台应用程序让它工作 当我试图从web.
<connectionStrings>
<add name="APIDatabase" connectionString="SERVER=MYSERVER;DATABASE=MYDB;uid=MYUID;pwd=MYPWD;" providerName="System.Data.SqlClient" />
</connectionStrings>
这是我在PC上运行的C#中的简单消费者应用程序项目
我已经添加了web引用作为对console应用程序的正确引用,并且我可以看到它公开的所有web方法,包括GetNames
我使用我想要的方法调用web服务,例如GetNames,但是当它试图为我的SqlDatabase对象(我的数据类)设置连接字符串时,SetUp方法会出错
这一切在演示、按play、在本地主机上运行等方面都能100%正常工作
但是,当我尝试在连接到Web服务的PC上运行测试控制台应用程序时,我遇到以下错误
开始于2014年10月9日22:05:23
未处理的异常:System.NullReferenceException:对象引用未设置为对象的实例。
在C:\Users\me\Documents\visualstudio 2010\Projects\WebService\WebService\WebService.asmx.cs中的WebService.Service1.SetUp(字符串方法)中:第170行
在C:\Users\me\Documents\Visual Studio 2010\Projects\WebService\WebService\WebService\WebService.asmx.cs中的WebService.Service1.GetNames(字符串ClientHash)处:第44行
在C:\Users\rreid\Documents\Visual Studio 2010\Projects\WebService\TestWebService\Program.cs中的TestWebService.Program.Main(字符串[]args)处:第21行
下面是我的消费者应用程序中的代码
using System;
using System.Collections;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Services;
namespace TestWebService
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("Start " + DateTime.Now.ToString());
// Create my web service object
MyWebService.Service1 MyWebService = new MyWebService.Service1();
string customerID = "6D104928-7633-4998-90C5-C01ABD4E010B"; // test a customer I know works
// this is line 21 in my code (see ethe rror message above)
// It errors in the SetUp method in the asmx file in the SetUp method when trying to get a connection string from the app.config file and set it to the database object I use
string response = MyWebService.GetNames(customerID);
Console.WriteLine("Stop " + DateTime.Now.ToString());
}
}
}
因此,我遵循一个指南(我已经接管了该项目)>
它的工作原理似乎是找到了web服务,该方法可以运行,但项目中的一个子方法失败了
-我是否应该将web.config重命名为其他名称,例如app.config?
-我应该硬编码连接字符串还是可以处理它们-我没有做任何我以前没有做过的关于获取配置设置的事情?
-我是否需要向我的消费者应用程序中添加额外的代码以允许它运行SQL或获取配置选项
我不确定我做错了什么,因为代码似乎都是正确的。此外,工作中没有人能帮助我,但他们总是背着我要求我去做
ConfigurationManager.ConnectionStrings["APIDatabase"].ToString();
由于您说这是出错的行,因此只能假设在您的.config文件中未找到“APIDatabase”。对空对象调用.ToString()
将导致该错误。如果您能够编辑和测试代码,那么应该将其拆分并检查是否能够获得连接字符串
ConnectionStringSettings csItem = ConfigurationManager.ConnectionStrings["APIDatabase"];
if (csItem == null)
throw new Exception("Connection string not found for \"APIDatabase\"");
SqlDatabase.ConnectionString = csItem.ConnectionString;
web.config应设置一个连接字符串条目,如下所示:
<configuration>
<connectionStrings>
<add name="APIDatabase"
providerName="YOUR PROVIDER"
connectionString="YOUR CONNECTION STRING" />
</connectionStrings>
</configuration>
编辑:刚刚注意到您在问题中提供了web.config连接字符串条目。确保它位于配置
元素下
仔细检查服务器是否提供了正确的web.config文件。我已经有一段时间没有使用IIS了,但我记得UI中似乎有几个不同版本的web.config。确保已将其添加到正确的
我是否应该将web.config重命名为其他名称,例如app.config
仅当您使用EXE与web服务通信时。exe在项目中使用
app.config
,然后在构建时重命名为MyExecutableName.exe.config
。如果您使用的是WinForm或Console应用程序,那么它将不会读取您的web.config,而是查找我所描述的.config。它现在正在工作并使用
ConfigurationManager.ConnectionString[“APIDatabase”].ToString()
从webservice代码获取连接字符串
我做的事
我将WebServiceName.Program添加到我的测试消费者应用程序的启动对象中
在重新构建web服务和将其复制到live站点之间,我总是从消费者应用程序中删除web引用。我不知道为什么它现在能够从配置文件中获取值,而不是像以前那样从硬编码字符串中获取值
我从我的web.config文件中删除了它,该文件位于它的顶部,似乎没有它也可以工作
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>
所以可能是XML阻止了它的访问
反正现在可以了 我说的是在WebService项目中重命名配置文件(在本地主机上以演示模式工作)。消费者应用程序中根本没有web.config文件,我只是尝试从中运行一个webmethod,而该webmethod又从web服务应用程序中的web.config文件访问连接字符串。连接字符串位于配置节点下,首先只有一些configsection节点和引用system.web.extensions等的SectionGroup。此外,连接字符串的所有部分都在该节点中。注意,它在调试(localhost)中运行良好,只有通过webservice it Errors,我需要的是某种方式来调试它。我可以从消费者控制台应用程序跳转到web方法/web服务中的断点吗?它在调试模式下工作似乎很奇怪,我可以添加webservice,查看方法,但是它在webservice中的一个简单的get config节点上出错
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>