当前位置: 首页 > 知识库问答 >
问题:

HttpRequest发布到RESTful web服务-Salesforce Apex Callout

贡斌
2023-03-14

我创建了一个RESTful web服务(C#,WCF),它实现了以下接口:

public interface ITestService
{
    [OperationContract]
    [WebInvoke(Method = "POST",
     ResponseFormat = WebMessageFormat.Json,
     BodyStyle = WebMessageBodyStyle.Bare,
     UriTemplate = "?s={aStr}")]
    string Test(string aStr);
}

其中,Test()方法只返回给定的内容(或默认的Test字符串)以及调用该方法时的时间戳。

该服务是公开可用的,因此当我在任何浏览器中输入url时:

http://xx.xxx.xxx.xx:41000/TestService/web/

它返回json“test”字符串(或任何可能使用输入的内容?s=...在末尾)。

我希望Salesforce将数据发布到此Web服务。

我的apex类看起来是这样的-当在Salesforce中插入一个对象时会触发它:

public class WebServiceCallout 
{
    @future (callout=true)
    public static void sendNotification(String name) 
    {
        HttpRequest req = new HttpRequest();
        HttpResponse res = new HttpResponse();
        Http http = new Http();

        req.setEndpoint('http://xx.xxx.xxx.xx:41000/TestService/web/');
        req.setMethod('POST');
        req.setHeader('Content-Type', 'application/json');
        req.setBody('');

        try 
        {
            res = http.send(req);
        } 
        catch(System.CalloutException e) 
        {
            System.debug('Callout error: '+ e);
            System.debug(res.toString());
        }
    }
}

当对象插入Salesforce时,Apex作业部分表示sendNotify()方法已完成。但该服务从未通过该方法获取POST。(注意:已添加远程站点设置中的服务IP)。

我的语法有问题吗?

(在这个阶段,我只想让Salesforce调用web服务-甚至不向其发布任何内容)

例如,我创建了一个示例控制台应用程序,可以很好地发布到服务中。

internal static void Main(string[] args)
{
    Uri address = new Uri("http://xx.xxx.xxx.xx:41000/TestService/web/");

    // Create the web request
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);

    // Set type to POST
    request.Method = "POST";
    request.ContentType = "application/json";

    // Create the data we want to send  
    var postData = "";

    // Create a byte array of the data we want to send
    var byteData = UTF8Encoding.UTF8.GetBytes(postData);

    // Set the content length in the request headers
    request.ContentLength = byteData.Length;

    // Write data
    using (var stream = request.GetRequestStream())
    {
        stream.Write(byteData, 0, byteData.Length);
    }

    // Get response  
    var response = (HttpWebResponse)request.GetResponse();

    var responseString = new StreamReader(
        response.GetResponseStream()
        ).ReadToEnd();

    Console.Writeline(responseString);
}

为什么我在Salesforce callout中的Apex类不正确?

共有1个答案

万俟光临
2023-03-14

我找到问题了。我没有在远程站点设置中指定端口(什么!!)

以上代码示例应该可以完美地工作(至少对我来说是这样)

对今后遇到这种情况的人的提示:

在设置中-

服务(远程站点URL)应采用以下格式-无论您在何处托管它:

http://xx.xxx.xxx.xx:41000

要测试上述代码,请访问:

【你的名字】-

并复制以下行:

WebServiceCallout.sendNotification('Test');

然后单击执行。

代码执行,您应该看到一个执行日志(以及其中的任何错误)。

 类似资料:
  • 我正在使用Spring4.0为RESTfulWeb服务创建POC。如果我们只传递字符串或任何其他基本数据类型,它就可以正常工作。 这个很好用。但如果我想将字节流或文件对象传递给函数,我如何编写具有这些参数的函数?我如何编写提供传递字节流的客户端? 我尝试了这个代码,但是得到了415个错误。 客户端代码-使用apache HttpClient

  • 问题内容: 我的问题是我取回了一些数据,但似乎无法显示它。 问题答案: 应该是您收到的内容的类型,但应该是您要发送的内容的哑剧类型,以下应该可以:

  • 我试图理解Spring MVC Restful架构。想知道有多少种方法可以将SpringMVC与RESTfulWeb服务集成在一起。我可以看到其中一个是使用Rest模板。 这是在Spring MVC中使用rest Web服务的唯一方法吗? 我们可以单独使用SpringMVC开发web应用程序而不使用任何web服务吗。 如果我说错了,请指正。 谢谢你的帮助。

  • hprose 为发布服务提供了多个方法,这些方法可以随意组合,通过这种组合,你所发布的服务将不会局限于某一个函数,某一个方法,某一个对象,而是可以将不同的函数和方法随意重新组合成一个服务。 AddFunction 方法 AddFunction(name string, function interface{}, option ...Options) Service 该方法的用于发布一个函数(命名函

  • 更新时间:2019-05-30 16:03:18 服务开发、调试完成后,需发布到云端,才能被调用。 操作步骤 在服务开发平台,单击页面右上角发布。 在弹出对话框中,填入描述信息后,单击确定。 执行结果服务发布后,IoT Studio为该服务生成默认访问域名。您便可在其他应用开发时使用该服务,或将服务进行商业化使用。 选择页面正上方**发布 > 域名管理**,查看默认域名,或配置自定义域名。

  • 问题内容: 我正在尝试将JSON对象发布到asp.net Web服务。 我的json看起来像这样: 我正在使用json2.js对我的json对象进行stringyfy。 我正在使用jQuery将其发布到我的Web服务。 我收到以下错误: “无效的JSON原语: 我发现了一堆与此相关的帖子,这似乎是一个非常普遍的问题,但我没有尝试解决此问题。 当萤火虫被发布到服务器时,它看起来像这样: marker