0

我有可以成功使用的 Web 服务,但我正在与其他想要通过 URL 输入参数的人共享我的 Web 服务,例如://localhost:12345/Lead.asmx?op=SendFiles&Id=1234678&Name=Joe&Surname=Kevin

我补充说:

<webServices>
      <protocols>
        <add name="HttpGet"/>
      </protocols>
    </webServices>

到我的 Web.Config 文件,我的 SendFile.asmx.cs 代码如下所示:

    namespace SendFiles
   {
       /// <summary>
       /// Summary description for Service1
       /// </summary>
    [WebService(Namespace = "http://testco.co.za/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class SendFile : System.Web.Services.WebService
    {

        [WebMethod]
        public bool PostToDB(LoadEntity _lead)
        {

            ConnectToSQLDB(ConfigurationManager.AppSettings["Server"],   ConfigurationManager.AppSettings["DB"],
                                ConfigurationManager.AppSettings["UserName"], ConfigurationManager.AppSettings["Password"], ref connectionRef);

            if (LI.ImportFiles(_lead, ref (error)) == true)
            {
                return true;
            }
            else
                return false;
        }

我尝试添加:

 [OperationContract]
    [WebGet]
    bool PostToDB(string IDNo, string FName, string SName);

但是我收到一个错误,我必须声明一个主体,因为它没有标记为抽象、外部或部分。任何人都可以帮忙吗?

4

2 回答 2

1

响应您关于如何创建 WCF 休息服务的请求...

在您的服务合同中:

[ServiceContract]
public interface ITestService
{
    [WebGet(UriTemplate = "Tester")]
    [OperationContract]
    Stream Tester();
}

关于你的实施

public class TestService : ITestService
{
    public Stream Tester()
    {
        NameValueCollection queryStringCol = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters;

        if (queryStringCol != null && queryStringCol.Count > 0)
        {
            string parameters = string.Empty;
            for (int i = 0; i < queryStringCol.Count; i++)
            {
                parameters += queryStringCol[i] + "\n";
            }

            return new MemoryStream(Encoding.UTF8.GetBytes(parameters));
        }
        else
            return new MemoryStream(Encoding.UTF8.GetBytes("Hello Jersey!"));
    }
}

这只是打印出所有查询字符串值。您可以根据获得的查询字符串参数进行所需的任何处理。

例如,如果您输入。

http://localhost:6666/TestService/Tester?abc=123&bca=234

然后你会得到

123 234

作为你的输出。

如果您仍然需要它,这是其余的代码。这是使用控制台应用程序构建的,但可以轻松转换为 Web。真正的进口东西是上面的。

class Program
{
    static ServiceHost _service = null;

    static void Main(string[] args)
    {
        _service = new ServiceHost(typeof(TestService));
        _service.Open();

        System.Console.WriteLine("TestService Started...");
        System.Console.WriteLine("Press ENTER to close service.");
        System.Console.ReadLine();

        _service.Close();
    }
}

<configuration>
<startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <services>
      <service name="ConsoleApplication1.TestService">
        <host>
          <baseAddresses>
            <add baseAddress="http://localhost:6666/TestService"/>
          </baseAddresses>
        </host>
        <endpoint binding="webHttpBinding" contract="ConsoleApplication1.ITestService"
          behaviorConfiguration="webHttp"/>
      </service>      
    </services>
    <bindings>
      <webHttpBinding>
        <binding name="webHttpBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647">
          <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>          
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
      <endpointBehaviors>
        <behavior name="webHttp">
          <webHttp/>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>
于 2012-10-25T14:01:39.063 回答
0

当您通过 .asmx 页面中的测试工具进行测试时,会生成什么 URL?您能否将其提供给您的调用者并验证他们执行与您相同的 URL 的能力?

如果其他人从非 .NET 客户端使用您的服务是您的主要用例,我会推荐基于 WCF REST 的服务。

于 2012-10-24T14:04:13.013 回答